java.lang.IllegalArgumentException: start < stop

Atlassian JIRA | Paul Greig [Parental Leave til 13OCT] | 3 years ago
  1. 0

    h3. Summary Reindexing an instance with Service Desk enabled and containing an issue with an unexpected status generates an error, additionally updating issues can also cause this same error. h3. Steps to Reproduce Either of the following: * Reindex an instance with Service Desk enabled and containing an issue with an unexpected status. * Adding a comment onto an issue incorrectly updates the SLA and can add multiple ticks. h3. Expected Results * No errors are present during indexing. * The SLA is not incorrectly updated. h3. Actual Results During reindexing the following errors are output: {noformat} 2013-12-11 00:08:34.929363500 2013-12-11 00:08:34,921 JiraTaskExectionThread-5 WARN sysadmin 8x851x1 jkie56 46.243.25.78,131.103.26.65 /rest/servicedesk/1/servicedesk/OS/sla/consistency [atlassian.jira.index.AccumulatingResultBuilder] java.lang.IllegalArgumentException: start < stop 2013-12-11 00:08:35.923852500 2013-12-11 00:08:35,923 JiraTaskExectionThread-5 WARN sysadmin 8x851x1 jkie56 46.243.25.78,131.103.26.65 /rest/servicedesk/1/servicedesk/OS/sla/consistency [atlassian.jira.index.AccumulatingResultBuilder] java.lang.IllegalArgumentException: start < stop{noformat} And when adding a comment to the issue the below stack trace is output: {noformat} 014-01-07 11:08:24,741 http-bio-8080-exec-1 ERROR jjarke 668x155132x1 1ocqex8 217.73.4.138,10.104.120.16 /rest/api/2/issue/TWO-2544/comment [servicedesk.internal.util.SafeRunner] Unable to run event handler SLA Cycle Update java.lang.IllegalArgumentException: start < stop at com.atlassian.jira.util.dbc.Assertions.is(Assertions.java:171) at com.atlassian.servicedesk.internal.sla.metric.DateTimeRange.<init>(DateTimeRange.java:26) at com.atlassian.servicedesk.internal.sla.goal.GoalCalculationServiceImpl.getOngoingGoalStatus(GoalCalculationServiceImpl.java:50) at com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.buildCompleteDataFromOngoing(SlaUpdateManagerImpl.java:336) at com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.updateOngoingSLAState(SlaUpdateManagerImpl.java:241) at com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.updateSla(SlaUpdateManagerImpl.java:186) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.processMetricConfiguration(SlaCycleUpdater.java:210) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.processIssueEvent(SlaCycleUpdater.java:150) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.runCycleUpdate(SlaCycleUpdater.java:109) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.access$000(SlaCycleUpdater.java:36) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater$1.run(SlaCycleUpdater.java:80) at com.atlassian.servicedesk.internal.util.SafeRunner.withTryCatchCondom(SafeRunner.java:58) at com.atlassian.servicedesk.internal.util.SafeRunner.access$000(SafeRunner.java:14) at com.atlassian.servicedesk.internal.util.SafeRunner$1.run(SafeRunner.java:36) at com.atlassian.servicedesk.bootstrap.lifecycle.LifecycleLock.runSafely(LifecycleLock.java:49) at com.atlassian.servicedesk.internal.util.SafeRunner.run(SafeRunner.java:31) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.onIssueEvent(SlaCycleUpdater.java:75) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:66) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:32) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:60) at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160) at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79) at com.atlassian.multitenant.event.DefaultPeeringEventPublisherManager.publish(DefaultPeeringEventPublisherManager.java:17) at com.atlassian.multitenant.event.PeeringEventPublisher.publish(PeeringEventPublisher.java:23) at com.atlassian.jira.event.issue.IssueEventDispatcher.dispatchEvent(IssueEventDispatcher.java:184) at com.atlassian.jira.event.issue.IssueEventDispatcher.dispatchEvent(IssueEventDispatcher.java:122) at com.atlassian.jira.issue.comments.DefaultCommentManager.dispatchEvent(DefaultCommentManager.java:352) at com.atlassian.jira.issue.comments.DefaultCommentManager.create(DefaultCommentManager.java:216) at com.atlassian.jira.issue.comments.DefaultCommentManager.create(DefaultCommentManager.java:166) at com.atlassian.jira.issue.comments.DefaultCommentManager.create(DefaultCommentManager.java:160) at com.atlassian.jira.bc.issue.comment.DefaultCommentService.create(DefaultCommentService.java:167) at com.atlassian.jira.bc.issue.comment.DefaultCommentService.create(DefaultCommentService.java:154) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.multitenant.impl.MultiTenantComponentFactoryImpl$AbstractMultiTenantAwareInvocationHandler.invokeInternal(MultiTenantComponentFactoryImpl.java:181) at com.atlassian.multitenant.impl.MultiTenantComponentFactoryImpl$MultiTenantAwareInvocationHandler.invoke(MultiTenantComponentFactoryImpl.java:211) at com.sun.proxy.$Proxy189.create(Unknown Source) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.plugin.osgi.hostcomponents.impl.DefaultComponentRegistrar$ContextClassLoaderSettingInvocationHandler.invoke(DefaultComponentRegistrar.java:129) at com.sun.proxy.$Proxy189.create(Unknown Source) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:154) at com.sun.proxy.$Proxy189.create(Unknown Source) at com.atlassian.jira.rest.v2.issue.CommentResource.addComment(CommentResource.java:266) at com.atlassian.jira.rest.v2.issue.IssueResource.addComment(IssueResource.java:1350) <+2> (DelegatingMethodAccessorImpl.java:43) {noformat} h3. Workaround For indexing, disabling the plugin allow the instance to be reindexed successfully. However when the plugin is re-enabled the instance will request for a reindex and the plugin may not operate successfully after the indexing operation fails. (!) It is not possible to workaround the issue comments bug - the plugin must be upgraded for this to happen. h3. Notes The database indicates the issue only ever encountered a PAUSED state: {noformat} id | issue | customfield | parentkey | stringvalue | numbervalue | textvalue | datevalue | valuetype -------+-------+-------------+-----------+--------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+----------- 13000 | 10614 | 10024 | | | | {"timeline":{"events":[{"date":1385607134332,"types":["PAUSE"]},{"date":1386648782950,"types":["START","UNPAUSE"]}]},"ong oingSLAData":{"goalId":7,"startTime":1386648782950,"paused":false},"completeSLAData":[],"metricId":2,"definitionChangeDate":1385428632047,"goalsChangeDate":1385428346695,"goalTimeUpdatedDate":0} | | 13001 | 10614 | 10023 | | | | {"timeline":{"events":[{"date":1385607134332,"types":["PAUSE"]},{"date":1386648782950,"types":["UNPAUSE"]}]},"ongoingSLAD ata":null,"completeSLAData":[],"metricId":1,"definitionChangeDate":1385438927910,"goalsChangeDate":null,"goalTimeUpdatedDate":null}{noformat} For a comparison a healthy issue registers a start event: {noformat} id | issue | customfield | parentkey | stringvalue | numbervalue | textvalue | datevalue | valuetype -------+-------+-------------+-----------+---------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+----------- 10211 | 10301 | 10105 | | | | {"timeline":{"events":[{"date":1387323274676,"types":["START"]}]},"ongoingSLAData":{"goalId":5,"startTime":1387323274676,"paused":false},"completeSLAData":[],"met ricId":3,"definitionChangeDate":0,"goalsChangeDate":1386719592286,"goalTimeUpdatedDate":1386719592272} | | 10213 | 10301 | 10103 | | | | {"timeline":{"events":[{"date":1387323274676,"types":["START"]}]},"ongoingSLAData":{"goalId":2,"startTime":1387323274676,"paused":false},"completeSLAData":[],"met ricId":1,"definitionChangeDate":0,"goalsChangeDate":1386719592199,"goalTimeUpdatedDate":1386719592158} | | 10221 | 10301 | 10104 | | | | {"timeline":{"events":[{"date":1387323274593,"types":["PAUSE"]},{"date":1387323872892,"types":["START","UNPAUSE"]},{"date":1387323875803,"types":["PAUSE"]}]},"ong oingSLAData":{"goalId":6,"startTime":1387323872892,"paused":true},"completeSLAData":[],"metricId":2,"definitionChangeDate":1387323646719,"goalsChangeDate":0,"goalTimeUpdatedDate":0} | |{noformat} Currently unable to reproduce forcing a pause before a start by using the SLA settings.

    Atlassian JIRA | 3 years ago | Paul Greig
    java.lang.IllegalArgumentException: start < stop
  2. 0

    h3. Summary Reindexing an instance with Service Desk enabled and containing an issue with an unexpected status generates an error, additionally updating issues can also cause this same error. h3. Steps to Reproduce Either of the following: * Reindex an instance with Service Desk enabled and containing an issue with an unexpected status. * Adding a comment onto an issue incorrectly updates the SLA and can add multiple ticks. h3. Expected Results * No errors are present during indexing. * The SLA is not incorrectly updated. h3. Actual Results During reindexing the following errors are output: {noformat} 2013-12-11 00:08:34.929363500 2013-12-11 00:08:34,921 JiraTaskExectionThread-5 WARN sysadmin 8x851x1 jkie56 46.243.25.78,131.103.26.65 /rest/servicedesk/1/servicedesk/OS/sla/consistency [atlassian.jira.index.AccumulatingResultBuilder] java.lang.IllegalArgumentException: start < stop 2013-12-11 00:08:35.923852500 2013-12-11 00:08:35,923 JiraTaskExectionThread-5 WARN sysadmin 8x851x1 jkie56 46.243.25.78,131.103.26.65 /rest/servicedesk/1/servicedesk/OS/sla/consistency [atlassian.jira.index.AccumulatingResultBuilder] java.lang.IllegalArgumentException: start < stop{noformat} And when adding a comment to the issue the below stack trace is output: {noformat} 014-01-07 11:08:24,741 http-bio-8080-exec-1 ERROR jjarke 668x155132x1 1ocqex8 217.73.4.138,10.104.120.16 /rest/api/2/issue/TWO-2544/comment [servicedesk.internal.util.SafeRunner] Unable to run event handler SLA Cycle Update java.lang.IllegalArgumentException: start < stop at com.atlassian.jira.util.dbc.Assertions.is(Assertions.java:171) at com.atlassian.servicedesk.internal.sla.metric.DateTimeRange.<init>(DateTimeRange.java:26) at com.atlassian.servicedesk.internal.sla.goal.GoalCalculationServiceImpl.getOngoingGoalStatus(GoalCalculationServiceImpl.java:50) at com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.buildCompleteDataFromOngoing(SlaUpdateManagerImpl.java:336) at com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.updateOngoingSLAState(SlaUpdateManagerImpl.java:241) at com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.updateSla(SlaUpdateManagerImpl.java:186) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.processMetricConfiguration(SlaCycleUpdater.java:210) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.processIssueEvent(SlaCycleUpdater.java:150) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.runCycleUpdate(SlaCycleUpdater.java:109) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.access$000(SlaCycleUpdater.java:36) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater$1.run(SlaCycleUpdater.java:80) at com.atlassian.servicedesk.internal.util.SafeRunner.withTryCatchCondom(SafeRunner.java:58) at com.atlassian.servicedesk.internal.util.SafeRunner.access$000(SafeRunner.java:14) at com.atlassian.servicedesk.internal.util.SafeRunner$1.run(SafeRunner.java:36) at com.atlassian.servicedesk.bootstrap.lifecycle.LifecycleLock.runSafely(LifecycleLock.java:49) at com.atlassian.servicedesk.internal.util.SafeRunner.run(SafeRunner.java:31) at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.onIssueEvent(SlaCycleUpdater.java:75) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:66) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:32) at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:60) at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160) at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79) at com.atlassian.multitenant.event.DefaultPeeringEventPublisherManager.publish(DefaultPeeringEventPublisherManager.java:17) at com.atlassian.multitenant.event.PeeringEventPublisher.publish(PeeringEventPublisher.java:23) at com.atlassian.jira.event.issue.IssueEventDispatcher.dispatchEvent(IssueEventDispatcher.java:184) at com.atlassian.jira.event.issue.IssueEventDispatcher.dispatchEvent(IssueEventDispatcher.java:122) at com.atlassian.jira.issue.comments.DefaultCommentManager.dispatchEvent(DefaultCommentManager.java:352) at com.atlassian.jira.issue.comments.DefaultCommentManager.create(DefaultCommentManager.java:216) at com.atlassian.jira.issue.comments.DefaultCommentManager.create(DefaultCommentManager.java:166) at com.atlassian.jira.issue.comments.DefaultCommentManager.create(DefaultCommentManager.java:160) at com.atlassian.jira.bc.issue.comment.DefaultCommentService.create(DefaultCommentService.java:167) at com.atlassian.jira.bc.issue.comment.DefaultCommentService.create(DefaultCommentService.java:154) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.multitenant.impl.MultiTenantComponentFactoryImpl$AbstractMultiTenantAwareInvocationHandler.invokeInternal(MultiTenantComponentFactoryImpl.java:181) at com.atlassian.multitenant.impl.MultiTenantComponentFactoryImpl$MultiTenantAwareInvocationHandler.invoke(MultiTenantComponentFactoryImpl.java:211) at com.sun.proxy.$Proxy189.create(Unknown Source) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.plugin.osgi.hostcomponents.impl.DefaultComponentRegistrar$ContextClassLoaderSettingInvocationHandler.invoke(DefaultComponentRegistrar.java:129) at com.sun.proxy.$Proxy189.create(Unknown Source) <+2> (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:154) at com.sun.proxy.$Proxy189.create(Unknown Source) at com.atlassian.jira.rest.v2.issue.CommentResource.addComment(CommentResource.java:266) at com.atlassian.jira.rest.v2.issue.IssueResource.addComment(IssueResource.java:1350) <+2> (DelegatingMethodAccessorImpl.java:43) {noformat} h3. Workaround For indexing, disabling the plugin allow the instance to be reindexed successfully. However when the plugin is re-enabled the instance will request for a reindex and the plugin may not operate successfully after the indexing operation fails. (!) It is not possible to workaround the issue comments bug - the plugin must be upgraded for this to happen. h3. Notes The database indicates the issue only ever encountered a PAUSED state: {noformat} id | issue | customfield | parentkey | stringvalue | numbervalue | textvalue | datevalue | valuetype -------+-------+-------------+-----------+--------------------------------------------------------+-------------+-------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+----------- 13000 | 10614 | 10024 | | | | {"timeline":{"events":[{"date":1385607134332,"types":["PAUSE"]},{"date":1386648782950,"types":["START","UNPAUSE"]}]},"ong oingSLAData":{"goalId":7,"startTime":1386648782950,"paused":false},"completeSLAData":[],"metricId":2,"definitionChangeDate":1385428632047,"goalsChangeDate":1385428346695,"goalTimeUpdatedDate":0} | | 13001 | 10614 | 10023 | | | | {"timeline":{"events":[{"date":1385607134332,"types":["PAUSE"]},{"date":1386648782950,"types":["UNPAUSE"]}]},"ongoingSLAD ata":null,"completeSLAData":[],"metricId":1,"definitionChangeDate":1385438927910,"goalsChangeDate":null,"goalTimeUpdatedDate":null}{noformat} For a comparison a healthy issue registers a start event: {noformat} id | issue | customfield | parentkey | stringvalue | numbervalue | textvalue | datevalue | valuetype -------+-------+-------------+-----------+---------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+----------- 10211 | 10301 | 10105 | | | | {"timeline":{"events":[{"date":1387323274676,"types":["START"]}]},"ongoingSLAData":{"goalId":5,"startTime":1387323274676,"paused":false},"completeSLAData":[],"met ricId":3,"definitionChangeDate":0,"goalsChangeDate":1386719592286,"goalTimeUpdatedDate":1386719592272} | | 10213 | 10301 | 10103 | | | | {"timeline":{"events":[{"date":1387323274676,"types":["START"]}]},"ongoingSLAData":{"goalId":2,"startTime":1387323274676,"paused":false},"completeSLAData":[],"met ricId":1,"definitionChangeDate":0,"goalsChangeDate":1386719592199,"goalTimeUpdatedDate":1386719592158} | | 10221 | 10301 | 10104 | | | | {"timeline":{"events":[{"date":1387323274593,"types":["PAUSE"]},{"date":1387323872892,"types":["START","UNPAUSE"]},{"date":1387323875803,"types":["PAUSE"]}]},"ong oingSLAData":{"goalId":6,"startTime":1387323872892,"paused":true},"completeSLAData":[],"metricId":2,"definitionChangeDate":1387323646719,"goalsChangeDate":0,"goalTimeUpdatedDate":0} | |{noformat} Currently unable to reproduce forcing a pause before a start by using the SLA settings.

    Atlassian JIRA | 3 years ago | Paul Greig [Parental Leave til 13OCT]
    java.lang.IllegalArgumentException: start < stop
  3. 0

    Error rendering 'com.atlassian.servicedesk:sla-web-panel'. Please contact your JIRA administrators. - Atlassian Answers

    atlassian.com | 8 months ago
    java.lang.IllegalArgumentException: com.atlassian.servicedesk.internal.sla.metric.DateTimeRange - the START time of the DateTimeRange must be strictly smaller than the STOP time at (Assertions.java:201)
  4. Speed up your debug routine!

    Automated exception search integrated into your IDE

  5. 0

    Could not send XML to the server

    freecol | 8 years ago | *anonymous
    java.lang.IllegalArgumentException: start == end
  6. 0

    flex: unwrapping empty block: IAE in RangeMarkerImpl

    YouTrack | 7 years ago
    java.lang.IllegalArgumentException: start > end: start=296; end=286

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. java.lang.IllegalArgumentException

      start < stop

      at com.atlassian.jira.util.dbc.Assertions.is()
    2. com.atlassian.jira
      Assertions.is
      1. com.atlassian.jira.util.dbc.Assertions.is(Assertions.java:171)
      1 frame
    3. com.atlassian.servicedesk
      SafeRunner.run
      1. com.atlassian.servicedesk.internal.sla.metric.DateTimeRange.<init>(DateTimeRange.java:26)
      2. com.atlassian.servicedesk.internal.sla.goal.GoalCalculationServiceImpl.getOngoingGoalStatus(GoalCalculationServiceImpl.java:50)
      3. com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.buildCompleteDataFromOngoing(SlaUpdateManagerImpl.java:336)
      4. com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.updateOngoingSLAState(SlaUpdateManagerImpl.java:241)
      5. com.atlassian.servicedesk.internal.sla.goal.SlaUpdateManagerImpl.updateSla(SlaUpdateManagerImpl.java:186)
      6. com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.processMetricConfiguration(SlaCycleUpdater.java:210)
      7. com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.processIssueEvent(SlaCycleUpdater.java:150)
      8. com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.runCycleUpdate(SlaCycleUpdater.java:109)
      9. com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater.access$000(SlaCycleUpdater.java:36)
      10. com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdater$1.run(SlaCycleUpdater.java:80)
      11. com.atlassian.servicedesk.internal.util.SafeRunner.withTryCatchCondom(SafeRunner.java:58)
      12. com.atlassian.servicedesk.internal.util.SafeRunner.access$000(SafeRunner.java:14)
      13. com.atlassian.servicedesk.internal.util.SafeRunner$1.run(SafeRunner.java:36)
      14. com.atlassian.servicedesk.bootstrap.lifecycle.LifecycleLock.runSafely(LifecycleLock.java:49)
      15. com.atlassian.servicedesk.internal.util.SafeRunner.run(SafeRunner.java:31)
      15 frames