> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Get full simulated transaction details

> Get all the simulation details for a transaction from a specific account or project. This data includes details about the transaction, simulation details, list of contracts involved, and generated access list. You need to provide the ID of the simulated transaction. 



## OpenAPI

````yaml /api-reference/openapi.json post /v1/account/{accountSlug}/project/{projectSlug}/simulations/{simulationId}
openapi: 3.1.0
info:
  version: 1.0.0
  title: Tenderly API
  description: >
    # Introduction


    The Tenderly API provides a programmatic interface for managing Tenderly
    resources using standard HTTP requests.

    It mirrors many functionalities available through the Tenderly Dashboard,
    enabling you to script complex actions. The API documentation includes a
    design and technology overview, followed by detailed endpoint information.


    [Log into your Tenderly account](https://dashboard.tenderly.co/login) to
    automatically populate your API credentials in the documentation. Your
    account ID and project slug will be pre-filled across the documentation,
    excluding the API access token for security reasons. 


    Base URL: `https://api.tenderly.co/api`


    ## Authentication


    The Tenderly API requires an access token to authenticate your requests.
    Learn how to [generate and manage your API access
    keys](https://docs.tenderly.co/account/projects/how-to-generate-api-access-token).


    Add `X-Access-Key` to each request header, e.g.:


    ```bash

    curl
    'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate'
    \
      -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
      ...
    ```


    Do not share your secret API keys in publicly accessible areas such as
    GitHub, client-side code, and so forth.


    Authentication to the API is performed via HTTP Basic Auth. Provide your API
    key as the basic auth username value. You do not need to provide a password.


    If you need to authenticate via bearer auth (e.g., for a cross-origin
    request), use:


    ```bash

    curl
    'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate'
    \
      -H 'Authorization: Bearer <TENDERLY_TOKEN>' \
      ...
    ```


    All API requests must be made over HTTPS. Calls made over plain HTTP will
    fail. API requests without authentication will also fail.


    ## Requests


    Any tool capable of making HTTP requests can interact with the API by
    requesting the appropriate URI. Requests should be made using the HTTPS
    protocol to ensure that traffic is encrypted. 


    The API's response varies with the request method used.


    |Method|Usage|

    |--- |--- |

    |GET|Used to retrieve information about your account, project, or resources.
    The requested information is returned as a JSON object. The attributes
    defined by the JSON object can be used to form additional requests. Requests
    made using the GET method are read-only and will not affect the objects you
    are querying.|

    |DELETE|Used to destroy a resource and remove it from your account and
    project. This methods removes the specified object if it is found. If it is
    not found, the operation will return a response indicating that the object
    was not found. You do not have to check if the resource is available prior
    to issuing a DELETE command. The final state will be the same regardless of
    its existence.|

    |PUT|Used to update the information about a resource in your account. The
    PUT method sets the state of the target using the provided values,
    regardless of their current values. Requests using the PUT method do not
    need to check the current attributes of the object.|

    |PATCH|Some resources support partial modification. In these cases, the
    PATCH method is available. Unlike PUT which generally requires a complete
    representation of a resource, a PATCH request is a set of instructions on
    how to modify a resource updating only specific attributes.|

    |POST|Used to create a new object. The POST request includes all of the
    attributes necessary to create a new object.|


    ## Errors


    The API responds with standard HTTP statuses, including error codes that
    indicate the outcome of requests. In the event of a problem, the status will
    contain the error code, while the

    body of the response will usually contain additional information about the
    problem.


    |Status Code|Type|Description|

    |--- |--- |--- |

    |200|OK|Everything worked as expected.|

    |400|Bad Request|The request was unacceptable, often due to missing a
    required parameter.|

    |401|Unauthorized|No valid API key provided.|

    |402|Request Failed|The parameters were valid but the request failed.|

    |403|Forbidden|The API key doesn’t have permissions to perform the request.|

    |404|Not Found|The requested resource doesn’t exist.|

    |429|Too Many Requests|Too many requests hit the API too quickly. We
    recommend an exponential backoff of your requests.|

    |500, 502, 503, 504|Server Errors|Something went wrong on Tenderly’s end.|


    Both 400 and 500 level errors return a JSON object in the response body,
    containing specific attributes detailing the error.


    |Name|Type|Description|

    |--- |--- |--- |

    |id|string|Endpoints include an error ID that should be provided when
    reporting bugs or opening support tickets to help identify the issue.|

    |slug|string|A short identifier corresponding to the HTTP status code
    returned. For example, the ID for a response returning a 404 status code
    would be "not_found."|

    |message|string|A message providing additional information about the error,
    including details to help resolve it when possible.|


    ### Example error response


    HTTP/1.1 404 Bad request

    ```json

    {

    "error": {
      "id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
      "slug": "bad_request",
      "message": "Bad request input parameters"
     }
    }

    ```


    ## Responses


    When a request is successful, a response body will typically be sent back in

    the form of a JSON object. An exception to this is when a DELETE request is

    processed, which will result in a successful HTTP 204 status and an empty

    response body.


    The value of these keys will generally be a JSON object for a request on a

    single object and an array of objects for a request on a collection of

    objects.


    ### Response for a single object


    ```json

    {
      "simulation": {
        "id": "123"
        "...": "..."
      }
    }

    ```


    ### Response for an object collection


    ```json

    {
      "simulations": [
        {
          "id": "123"
          "...": "..."
        },
        {
          "id": "1234"
          "...": "..."
        }
      ]
    }

    ```


    ## Pagination


    By default, 20 objects are returned per page per request.

    You can customize this behavior using the following parameters:


    * **Pagination Limit (perPage)**: To change the number of items per page,

    append `?perPage=[number]` to your request. For example, `?perPage=2` limits

    the results to two items per page. The maximum limit is 100 items per page.

    * **Page Offset (page)**: To navigate through paginated results, use the

    `?page=[number]` parameter. For instance, `?page=3` will take you to the
    third page of the results.

    Only positive integers are valid for this parameter.


    Remember:


    * You can combine these parameters. For example, `?perPage=10&page=2` will
    show the second page with 10 items per page.

    * The maximum number of results per page (`perPage`) is 100.


    ## Rate limits


    Requests through the API are rate limited per `X-Access-Key` API key.
    Current rate limits:


    * **Non-authenticated users:** 100 requests per minute

    * **Authenticated users:** 400 requests per minute


    Once you exceed either limit, you will be rate limited until the next cycle

    starts. Space out any requests that you would otherwise issue in bursts for

    the best results.


    The rate limiting information is contained within the response headers of

    each request. The relevant headers are:


    * **X-Tdly-Limit**: The number of requests that can be made per minute.

    * **X-Tdly-Remaining**: The number of requests that remain before you hit
    your request limit. See the information below for how the request limits
    expire.

    * **X-Tdly-Reset-Timestamp**: This represents the time when the oldest
    request will expire. The value is given in [Unix epoch
    time](http://en.wikipedia.org/wiki/Unix_time). See below for more
    information about how request limits expire.


    As long as the `X-Tdly-Remaining` count is above zero, you will be able

    to make additional requests.


    The way that a request expires and is removed from the current limit count

    is important to understand. Rather than counting all of the requests for a

    minute and resetting the `X-Tdly-Remaining` value at the end of the minute,

    each request instead has its own timer.


    This means that each request contributes toward the `X-Tdly-Remaining`

    count for one complete minute after the request is made. When that request's

    timer runs out, it is no longer counted toward the request limit.


    This has implications on the meaning of the `X-Tdly-Reset-Timestamp` header
    as

    well. Because the entire rate limit is not reset at one time, the value of

    this header is set to the time when the _oldest_ request will expire.


    Keep this in mind if you see your `X-Tdly-Reset-Timestamp` value change, but
    not

    move an entire minute into the future.


    If the `X-Tdly-Remaining` reaches zero, subsequent requests will receive

    a 429 error code until the request reset has been reached. 


    `X-Tdly-Remaining` reaching zero can also indicate that the "burst limit" of
    250 

    requests per minute limit was met, even if the 400 requests per minute limit
    was not. 


    You can see the format of the response in the examples. 


    **Note:** Some endpoints may have special rate limit requirements that

    are independent of the limits defined above.


    ### Sample rate limit headers


    ```bash

    'X-Tdly-Limit': 100

    'X-Tdly-Remaining': 79

    'X-Tdly-Reset-Timestamp': 1402425459

    ```


    ### Sample rate exceeded response


    429 Too Many Requests

    ```bash

    {
      id: "too_many_requests",
      message: "API Rate limit exceeded."
    }

    ```


    ## Parameters


    There are two different ways to pass parameters in a request to the API.


    When passing parameters to create or update an object, parameters should be

    passed as a JSON object containing the appropriate attribute names and

    values as key-value pairs. When you use this format, you should specify that

    you are sending a JSON object in the header. This is done by setting the

    `Content-Type` header to `application/json`. This ensures that your request

    is interpreted correctly.


    When passing parameters to filter a response on GET requests, parameters can

    be passed using standard query attributes. In this case, the parameters

    would be embedded into the URI itself by appending a `?` to the end of the

    URI and then setting each attribute with an equal sign. Attributes can be

    separated with a `&`. Tools like `curl` can create the appropriate URI when

    given parameters and values; this can also be done using the `-F` flag and

    then passing the key and value as an argument. The argument should take the

    form of a quoted string with the attribute being set to a value with an

    equal sign.


    ### Pass parameters as a JSON object


    ```bash

    curl
    'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulate'
    \
      -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
      -H 'content-type: application/json' \
      --data-raw '{"network_id":"1","block_number":null,"transaction_index":null,"from":"0x0000000000000000000000000000000000000000","input":"0x42966c68000000000000000000000000000000000000000000000000000000000000022b","to":"0x94c87a7b26980ae7aaa361c5c7e03e632ab36e6c","gas":8000000,"gas_price":"0","value":"0","access_list":[],"generate_access_list":true,"save":true,"block_header":null}' \
      --compressed
    ```


    ### Pass filter parameters as a query string


    ```bash

    curl
    'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulations?page=1&perPage=20'
    \
      -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
      --compressed
    ```


    ## Cross origin resource sharing


    In order to make requests to the API from other domains, the API implements

    Cross Origin Resource Sharing (CORS) support.


    CORS support is generally used to create AJAX requests outside of the domain

    that the request originated from. This is necessary to implement projects

    like control panels utilizing the API. This tells the browser that it can

    send requests to an outside domain.


    The procedure that the browser initiates in order to perform these actions

    (other than GET requests) begins by sending a "preflight" request. This sets

    the `Origin` header and uses the `OPTIONS` method. The server will reply

    with the methods it allows and some of the limits it imposes. The

    client then sends the actual request if it falls within the allowed

    constraints.


    This process is usually done by the browser in the background, but you can

    use curl to emulate this process. The headers that will be set to show the
    constraints are:


    * **Access-Control-Allow-Origin**: This is the domain that is sent by the
    client or browser as the origin of the request. It is set through an
    `Origin` header.

    * **Access-Control-Allow-Methods**: This specifies the allowed options for
    requests from that domain. This will generally be all available methods.

    * **Access-Control-Expose-Headers**: This will contain the headers that will
    be available to requests from the origin domain.

    * **Access-Control-Max-Age**: This is the length of time that the access is
    considered valid. After this expires, a new preflight should be sent.

    * **Access-Control-Allow-Credentials**: This will be set to `true`. It
    basically allows you to send your Access token for authentication.


    You should not need to be concerned with the details of these headers,

    because the browser will typically do all of the work for you.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    name: Tenderly Support
    email: support@tenderly.co
  termsOfService: https://tenderly.co/terms-of-service
servers:
  - url: https://api.tenderly.co/api
    description: production
security:
  - ApiKeyAuth: []
  - BearerAuth: []
tags:
  - name: Contracts
    description: >-
      Tenderly allows you to add verified and unverified smart contracts to your
      project to use in development. Once you add a contract, you can start
      inspecting and debugging transactions, simulating transactions with
      modified parameters, or monitoring contract usage.


      Learn more about managing [Smart
      Contracts](https://docs.tenderly.co/monitoring/smart-contracts).
  - name: Wallets
    description: >-
      Similar to contracts, you can also add any public wallet addresses to your
      Tenderly projects. This allows you to keep track of wallet activity, view
      all transactions, simulate transactions, set up wallet alerts, and more.


      Learn more about managing
      [Wallets](https://docs.tenderly.co/monitoring/wallets).
  - name: Simulations
    description: >-
      Transaction Simulations let you preview the exact outcomes of transactions
      before they are sent to the live network. Transactions are simulated on an
      exact replica of the latest state of the specific network, providing the
      most accurate simulation results. 


      The Tenderly API supports simulating single or bundled transactions
      through a single request. 


      **Common use cases for simulations**


      - [Asset and balance
      changes](https://docs.tenderly.co/simulations/asset-balance-changes): Get
      exact dollar values for all balance and asset changes that will happen.

      - [Gas estimation](https:/docs.tenderly.co//simulations/gas-estimation):
      Accurately predict the gas costs before sending the transaction.

      - [State overrides](https://docs.tenderly.co/simulations/state-overrides):
      Modify blockchain conditions like timestamps and contract data to test
      different scenarios.

      - [Preview transaction
      outcomes](https://docs.tenderly.co/simulations/transaction-preview):
      Identify and fix issues that could cause transactions to fail.

      - Access lists: Create lists of addresses and storage slots the
      transaction will access.

      - Human-readable errors: Get complex errors decoded into explanations that
      you can easily understand.


      Learn more about [Transaction
      Simulations](https://docs.tenderly.co/simulations).
  - name: Alerts
    description: >-
      Alerts listen for specific on-chain events and send real-time
      notifications to your desired destination when the event occurs. This can
      be email, your favorite messaging app, an incident monitoring system, or
      webhooks and Web3 Actions.


      Learn more about
      [Alerts](https://docs.tenderly.co/alerts/intro-to-alerts).
  - name: Delivery Channels
    description: >-
      When the desired event triggers your Alert, Tenderly will send the data
      about the event to a designated Alert Destination. The Destination
      (Delivery Channel) will use this data to send you an email notification,
      Discord, or Slack message or send it to another Tenderly system like Web3
      Actions or a Webhook.


      Learn more about [Delivery
      Channels](https://docs.tenderly.co/alerts/configuring-alert-destinations).
  - name: Web3 Actions
    description: >-
      Web3 Actions allow you to execute custom code in response to on-chain and
      off-chain events. They work as programmable hooks for smart contracts. A
      Web3 Action is a regular JS/TS function that is executed on our
      infrastructure. 


      Learn more about [Web3
      Actions](https://docs.tenderly.co/web3-actions/intro-to-web3-actions).
  - name: Virtual Environments
    description: >-
      Virtual Environments are simulated blockchain networks, designed to
      replicate real networks for various stages of dapp development. Use them
      as risk-free development and staging infrastructure that fully tracks real
      network state without the need to use real cryptocurrency or assets.


      Learn more about [Virtual
      Environments](https://docs.tenderly.co/virtual-testnets).
  - name: Environments
    description: >-
      Environments are multi-chain groupings of Virtual Environments, providing
      a coordinated set of simulated networks for end-to-end cross-chain
      testing. Each environment contains a Virtual Environment per configured
      network, and an active instance manages the current state across all
      chains.


      Environments support cross-chain bridge simulation, allowing you to test
      bridging and messaging protocols across networks in a fully isolated and
      reproducible setup.
  - name: Other
    description: >-
      This section contains miscellaneous endpoints that do not fit into other
      categories, such as checking supported networks on the Tenderly platform.
paths:
  /v1/account/{accountSlug}/project/{projectSlug}/simulations/{simulationId}:
    post:
      tags:
        - Simulations
      summary: Get full simulated transaction details
      description: >-
        Get all the simulation details for a transaction from a specific account
        or project. This data includes details about the transaction, simulation
        details, list of contracts involved, and generated access list. You need
        to provide the ID of the simulated transaction. 
      operationId: getSimulatedTransactionById
      parameters:
        - name: accountSlug
          in: path
          schema:
            type: string
          required: true
          description: Account slug of the user
          example: me
        - name: projectSlug
          in: path
          schema:
            type: string
          required: true
          description: Project slug of the account
          example: project
        - name: simulationId
          in: path
          schema:
            type: string
          required: true
          description: Simulation Id to get info for
          example: e07c0269-3e2c-41b0-986a-74dc5a357c7d
      responses:
        '200':
          $ref: '#/components/responses/simulations_single_post'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/server_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl
            'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulations/68031df7-16de-469d-ac9d-6947466a193b'
            \
              -X 'POST' \
              -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
              --compressed
        - lang: fetch
          source: >-
            fetch('https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project/${TENDERLY_PROJECT_SLUG}/simulations/68031df7-16de-469d-ac9d-6947466a193b',
            {
              'headers': {
                'X-Access-Key': '${TENDERLY_ACCESS_KEY}',
                'content-type': 'application/json',
              },
              'body': null,
              'method': 'POST',
            });
components:
  responses:
    simulations_single_post:
      description: A successful response.
      headers:
        X-Tdly-Limit:
          $ref: '#/components/headers/ratelimit-limit'
        X-Tdly-Remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        X-Tdly-Reset-Timestamp:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/simulations_single_post_response'
    bad_request:
      description: Bad Request
      headers:
        X-Tdly-Limit:
          $ref: '#/components/headers/ratelimit-limit'
        X-Tdly-Remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        X-Tdly-Reset-Timestamp:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error:
              id: 596b1dc7-af60-477b-aab3-6c93eb92ddfa
              slug: bad_request
              message: Bad request input parameters
    unauthorized:
      description: Unauthorized
      headers:
        X-Tdly-Limit:
          $ref: '#/components/headers/ratelimit-limit'
        X-Tdly-Remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        X-Tdly-Reset-Timestamp:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error:
              id: 596b1dc7-af60-477b-aab3-6c93eb92ddfa
              slug: unauthorized
              message: Unauthorized
    forbidden:
      description: Forbidden
      headers:
        X-Tdly-Limit:
          $ref: '#/components/headers/ratelimit-limit'
        X-Tdly-Remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        X-Tdly-Reset-Timestamp:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error:
              id: 596b1dc7-af60-477b-aab3-6c93eb92ddfa
              slug: insufficient_permissions
              message: Insufficient permissions
    not_found:
      description: The resource was not found.
      headers:
        X-Tdly-Limit:
          $ref: '#/components/headers/ratelimit-limit'
        X-Tdly-Remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        X-Tdly-Reset-Timestamp:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error:
              id: 596b1dc7-af60-477b-aab3-6c93eb92ddfa
              slug: resource_not_found
              message: The resource you requested could not be found.
    server_error:
      description: Server error.
      headers:
        X-Tdly-Limit:
          $ref: '#/components/headers/ratelimit-limit'
        X-Tdly-Remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        X-Tdly-Reset-Timestamp:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            error:
              id: 596b1dc7-af60-477b-aab3-6c93eb92ddfa
              slug: internal_server_error
              message: Internal server error
  headers:
    ratelimit-limit:
      schema:
        type: integer
      example: 100
      description: >-
        The default limit on number of requests that can be made per minute.
        Current rate limits are:

        * **Non-authenticated users:** 100 requests per minute

        * **Authenticated users:** 400 requests per minute
    ratelimit-remaining:
      schema:
        type: integer
      example: 16
      description: >-
        The number of requests in your quota that remain before you hit your
        request limit.
    ratelimit-reset:
      schema:
        type: integer
      example: 1444931833
      description: >-
        The time when the oldest request will expire. The value is given in Unix
        epoch time.
  schemas:
    simulations_single_post_response:
      type: object
      title: Get Simulated Transaction By Id Response
      description: >-
        An object with details about simulated transaction by ID for given
        project.
      example:
        transaction:
          hash: '0x489b21c3b9215944c6b5784fbfc57797d236426ba0bcabaef80c98006a26429a'
          block_hash: ''
          block_number: 109421606
          from: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
          gas: 28694
          gas_price: 200648150
          gas_fee_cap: 0
          gas_tip_cap: 0
          cumulative_gas_used: 0
          gas_used: 28694
          effective_gas_price: 0
          input: >-
            0xe56461ad00000000000000000000000000000000000000000000000000000000000000380000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
          nonce: 2
          to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
          index: 8
          value: '0x01e2083dbb2000'
          access_list: null
          status: true
          addresses:
            - '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
            - '0x5800249621da520adfdca16da20d8a5fc0f814d8'
          contract_ids:
            - eth:10:0x5361b224b3af376fa234dc992c0f3595a325cbf7
            - eth:10:0x5800249621da520adfdca16da20d8a5fc0f814d8
          network_id: '10'
          timestamp: '2023-09-11T14:19:49Z'
          function_selector: ''
          l1_message_sender: '0x0000000000000000000000000000000000000000'
          l1_block_number: 0
          l1_timestamp: 0
          deposit_tx: false
          system_tx: false
          mint: 0
          sig:
            v: '0x0'
            r: '0x0'
            s: '0x0'
          transaction_info:
            contract_id: eth:10:0x5800249621da520adfdca16da20d8a5fc0f814d8
            block_number: 109421606
            transaction_id: '0x489b21c3b9215944c6b5784fbfc57797d236426ba0bcabaef80c98006a26429a'
            contract_address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
            method: depositNativeToken
            parameters: null
            intrinsic_gas: 21572
            refund_gas: 0
            call_trace:
              hash: >-
                0x489b21c3b9215944c6b5784fbfc57797d236426ba0bcabaef80c98006a26429a
              contract_name: GasMovr
              function_name: depositNativeToken
              function_pc: 3873
              function_op: JUMPDEST
              function_file_index: 3
              function_code_start: 1178
              function_line_number: 52
              function_code_length: 317
              absolute_position: 193
              caller_pc: 0
              caller_op: CALL
              call_type: CALL
              address: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
              from: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
              from_balance: '3767332357766171'
              to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
              to_balance: '19191783044686927921'
              value: '530000000000000'
              caller:
                address: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                balance: '3231574959750071'
              block_timestamp: '0001-01-01T00:00:00Z'
              gas: 7122
              gas_used: 7122
              intrinsic_gas: 21572
              storage_address: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
              input: >-
                0xe56461ad00000000000000000000000000000000000000000000000000000000000000380000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
              decoded_input:
                - soltype:
                    name: destinationChainId
                    type: uint256
                    storage_location: default
                    offset: 0
                    index: >-
                      0x0000000000000000000000000000000000000000000000000000000000000000
                    indexed: false
                    simple_type:
                      type: uint
                  value: '56'
                - soltype:
                    name: _to
                    type: address
                    storage_location: default
                    offset: 0
                    index: >-
                      0x0000000000000000000000000000000000000000000000000000000000000000
                    indexed: false
                    simple_type:
                      type: address
                  value: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
              balance_diff:
                - address: '0x5361b224B3Af376Fa234dc992c0f3595A325cBf7'
                  original: '3767332357766171'
                  dirty: '3231574959750071'
                  is_miner: false
                - address: '0x5800249621DA520aDFdCa16da20d8A5Fc0f814d8'
                  original: '19191783044686927921'
                  dirty: '19192313044686927921'
                  is_miner: false
                - address: '0x4200000000000000000000000000000000000011'
                  original: '44259434701916885990'
                  dirty: '44259434770949054660'
                  is_miner: true
                - address: '0x4200000000000000000000000000000000000019'
                  original: '27817144889955776893'
                  dirty: '27817150578321624323'
                  is_miner: false
                - address: '0x420000000000000000000000000000000000001A'
                  original: '414496790679326948273'
                  dirty: '414496817237149696422'
                  is_miner: false
              nonce_diff:
                - address: '0x5361b224B3Af376Fa234dc992c0f3595A325cBf7'
                  original: '2'
                  dirty: '3'
              logs:
                - name: Deposit
                  anonymous: false
                  inputs:
                    - soltype:
                        name: destinationReceiver
                        type: address
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: true
                        simple_type:
                          type: address
                      value: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                    - soltype:
                        name: amount
                        type: uint256
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: false
                        simple_type:
                          type: uint
                      value: '530000000000000'
                    - soltype:
                        name: destinationChainId
                        type: uint256
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: true
                        simple_type:
                          type: uint
                      value: '56'
                  raw:
                    address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                    topics:
                      - >-
                        0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15
                      - >-
                        0x0000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
                      - >-
                        0x0000000000000000000000000000000000000000000000000000000000000038
                    data: >-
                      0x0000000000000000000000000000000000000000000000000001e2083dbb2000
                  trace_index: null
              output: 0x
              decoded_output: null
              network_id: '10'
              calls:
                - hash: ''
                  contract_name: GasMovr
                  function_name: paused
                  function_pc: 2439
                  function_op: JUMPDEST
                  function_file_index: 1
                  function_code_start: 1098
                  function_line_number: 40
                  function_code_length: 84
                  absolute_position: 197
                  caller_pc: 3880
                  caller_op: JUMP
                  caller_file_index: 1
                  caller_line_number: 52
                  caller_code_start: 1412
                  caller_code_length: 8
                  call_type: JUMPDEST
                  address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  from: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  from_balance: null
                  to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  to_balance: null
                  value: null
                  caller:
                    address: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                    balance: '3231574959750071'
                  block_timestamp: '0001-01-01T00:00:00Z'
                  gas: 6429
                  gas_used: 2209
                  storage_address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  input: 0x
                  output: 0x
                  decoded_output:
                    - soltype:
                        name: ''
                        type: bool
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: false
                        simple_type:
                          type: bool
                      value: false
                  network_id: ''
                  calls:
                    - hash: ''
                      contract_name: GasMovr
                      function_pc: 0
                      function_op: STOP
                      absolute_position: 202
                      caller_pc: 2446
                      caller_op: SLOAD
                      caller_file_index: 1
                      caller_line_number: 41
                      caller_code_start: 1168
                      caller_code_length: 7
                      call_type: SLOAD
                      address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                      from: '0x0000000000000000000000000000000000000000'
                      from_balance: null
                      to: '0x0000000000000000000000000000000000000000'
                      to_balance: null
                      value: null
                      block_timestamp: '0001-01-01T00:00:00Z'
                      gas: 6416
                      gas_used: 2100
                      storage_address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                      storage_slot:
                        - >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                      storage_value_original:
                        - >-
                          0x000000000000000000000000fb5693de25f8f492a7321ad4fed953f09ac4dbb3
                      storage_decoded:
                        - address: ''
                          soltype:
                            name: _owner
                            type: address
                            storage_location: storage
                            offset: 0
                            index: >-
                              0x0000000000000000000000000000000000000000000000000000000000000000
                            indexed: false
                            simple_type:
                              type: address
                          original: '0xfb5693de25f8f492a7321ad4fed953f09ac4dbb3'
                          dirty: '0xfb5693de25f8f492a7321ad4fed953f09ac4dbb3'
                          raw:
                            - address: ''
                              key: >-
                                0x0000000000000000000000000000000000000000000000000000000000000000
                              original: >-
                                0x000000000000000000000000fb5693de25f8f492a7321ad4fed953f09ac4dbb3
                              dirty: >-
                                0x000000000000000000000000fb5693de25f8f492a7321ad4fed953f09ac4dbb3
                        - address: ''
                          soltype:
                            name: _paused
                            type: bool
                            storage_location: storage
                            offset: 160
                            index: >-
                              0x0000000000000000000000000000000000000000000000000000000000000000
                            indexed: false
                            simple_type:
                              type: bool
                          original: false
                          dirty: false
                          raw:
                            - address: ''
                              key: >-
                                0x0000000000000000000000000000000000000000000000000000000000000000
                              original: >-
                                0x000000000000000000000000fb5693de25f8f492a7321ad4fed953f09ac4dbb3
                              dirty: >-
                                0x000000000000000000000000fb5693de25f8f492a7321ad4fed953f09ac4dbb3
                      input: 0x
                      output: 0x
                      decoded_output: null
                      network_id: ''
                      calls: null
                - hash: ''
                  contract_name: GasMovr
                  function_pc: 0
                  function_op: STOP
                  absolute_position: 237
                  caller_pc: 3971
                  caller_op: SLOAD
                  caller_file_index: 3
                  caller_line_number: 58
                  caller_code_start: 1335
                  caller_code_length: 41
                  call_type: SLOAD
                  address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  from: '0x0000000000000000000000000000000000000000'
                  from_balance: null
                  to: '0x0000000000000000000000000000000000000000'
                  to_balance: null
                  value: null
                  block_timestamp: '0001-01-01T00:00:00Z'
                  gas: 4109
                  gas_used: 2100
                  storage_address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  storage_slot:
                    - >-
                      0xb607cc36270bbbb376b98f602ec3a5ec6c4fe7cf0d42af35fd17a642242d24fe
                  storage_value_original:
                    - >-
                      0x0000000000000000000000000000000000000000000000000000000000000001
                  input: 0x
                  output: 0x
                  decoded_output: null
                  network_id: ''
                  calls: null
                - hash: ''
                  contract_name: GasMovr
                  function_name: Deposit
                  function_pc: 0
                  function_op: STOP
                  absolute_position: 308
                  caller_pc: 4123
                  caller_op: LOG3
                  caller_file_index: 3
                  caller_line_number: 62
                  caller_code_start: 1445
                  caller_code_length: 43
                  call_type: LOG3
                  address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  from: '0x0000000000000000000000000000000000000000'
                  from_balance: null
                  to: '0x0000000000000000000000000000000000000000'
                  to_balance: null
                  value: null
                  block_timestamp: '0001-01-01T00:00:00Z'
                  gas: 1769
                  gas_used: 1756
                  log:
                    name: Deposit
                    anonymous: false
                    inputs:
                      - soltype:
                          name: destinationReceiver
                          type: address
                          storage_location: default
                          offset: 0
                          index: >-
                            0x0000000000000000000000000000000000000000000000000000000000000000
                          indexed: true
                          simple_type:
                            type: address
                        value: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                      - soltype:
                          name: amount
                          type: uint256
                          storage_location: default
                          offset: 0
                          index: >-
                            0x0000000000000000000000000000000000000000000000000000000000000000
                          indexed: false
                          simple_type:
                            type: uint
                        value: '530000000000000'
                      - soltype:
                          name: destinationChainId
                          type: uint256
                          storage_location: default
                          offset: 0
                          index: >-
                            0x0000000000000000000000000000000000000000000000000000000000000000
                          indexed: true
                          simple_type:
                            type: uint
                        value: '56'
                    raw:
                      address: '0x5800249621DA520aDFdCa16da20d8A5Fc0f814d8'
                      topics:
                        - >-
                          0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15
                        - >-
                          0x0000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
                        - >-
                          0x0000000000000000000000000000000000000000000000000000000000000038
                      data: >-
                        0x0000000000000000000000000000000000000000000000000001e2083dbb2000
                    trace_index: null
                  storage_address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  input: 0x
                  decoded_input:
                    - soltype:
                        name: destinationReceiver
                        type: address
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: true
                        simple_type:
                          type: address
                      value: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                    - soltype:
                        name: amount
                        type: uint256
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: false
                        simple_type:
                          type: uint
                      value: '530000000000000'
                    - soltype:
                        name: destinationChainId
                        type: uint256
                        storage_location: default
                        offset: 0
                        index: >-
                          0x0000000000000000000000000000000000000000000000000000000000000000
                        indexed: true
                        simple_type:
                          type: uint
                      value: '56'
                  output: 0x
                  decoded_output: null
                  network_id: ''
                  calls: null
              asset_changes:
                - token_info:
                    standard: NativeCurrency
                    type: Native
                    symbol: eth
                    name: Ethereum
                    logo: >-
                      https://assets.coingecko.com/coins/images/279/large/ethereum.png?1696501628
                    decimals: 18
                    dollar_value: '2356.989990234375'
                  type: Transfer
                  from: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                  to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  amount: '0.00053'
                  raw_amount: '530000000000000'
                  dollar_value: '1.24920469482421875'
              balance_changes:
                - address: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                  dollar_value: '-1.24920469482421875'
                  transfers:
                    - 0
                - address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  dollar_value: '1.24920469482421875'
                  transfers:
                    - 0
            stack_trace: null
            logs:
              - name: Deposit
                anonymous: false
                inputs:
                  - soltype:
                      name: destinationReceiver
                      type: address
                      storage_location: default
                      offset: 0
                      index: >-
                        0x0000000000000000000000000000000000000000000000000000000000000000
                      indexed: true
                      simple_type:
                        type: address
                    value: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                  - soltype:
                      name: amount
                      type: uint256
                      storage_location: default
                      offset: 0
                      index: >-
                        0x0000000000000000000000000000000000000000000000000000000000000000
                      indexed: false
                      simple_type:
                        type: uint
                    value: '530000000000000'
                  - soltype:
                      name: destinationChainId
                      type: uint256
                      storage_location: default
                      offset: 0
                      index: >-
                        0x0000000000000000000000000000000000000000000000000000000000000000
                      indexed: true
                      simple_type:
                        type: uint
                    value: '56'
                raw:
                  address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                  topics:
                    - >-
                      0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15
                    - >-
                      0x0000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
                    - >-
                      0x0000000000000000000000000000000000000000000000000000000000000038
                  data: >-
                    0x0000000000000000000000000000000000000000000000000001e2083dbb2000
                trace_index: null
            balance_diff:
              - address: '0x5361b224B3Af376Fa234dc992c0f3595A325cBf7'
                original: '3767332357766171'
                dirty: '3231574959750071'
                is_miner: false
              - address: '0x5800249621DA520aDFdCa16da20d8A5Fc0f814d8'
                original: '19191783044686927921'
                dirty: '19192313044686927921'
                is_miner: false
              - address: '0x4200000000000000000000000000000000000011'
                original: '44259434701916885990'
                dirty: '44259434770949054660'
                is_miner: true
              - address: '0x4200000000000000000000000000000000000019'
                original: '27817144889955776893'
                dirty: '27817150578321624323'
                is_miner: false
              - address: '0x420000000000000000000000000000000000001A'
                original: '414496790679326948273'
                dirty: '414496817237149696422'
                is_miner: false
            nonce_diff:
              - address: '0x5361b224B3Af376Fa234dc992c0f3595A325cBf7'
                original: '2'
                dirty: '3'
            state_diff: null
            raw_state_diff: null
            console_logs: null
            asset_changes:
              - token_info:
                  standard: NativeCurrency
                  type: Native
                  symbol: eth
                  name: Ethereum
                  logo: >-
                    https://assets.coingecko.com/coins/images/279/large/ethereum.png?1696501628
                  decimals: 18
                  dollar_value: '2356.989990234375'
                type: Transfer
                from: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                amount: '0.00053'
                raw_amount: '530000000000000'
                dollar_value: '1.24920469482421875'
            balance_changes:
              - address: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
                dollar_value: '-1.24920469482421875'
                transfers:
                  - 0
              - address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
                dollar_value: '1.24920469482421875'
                transfers:
                  - 0
            created_at: '2023-09-11T14:19:49Z'
          method: ''
          decoded_input: null
          call_trace:
            - call_type: CALL
              from: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
              to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
              gas: 7122
              gas_used: 7122
              value: '0x01e2083dbb2000'
              address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
              input: >-
                0xe56461ad00000000000000000000000000000000000000000000000000000000000000380000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
              fromBalance: '0x0d625e6aef7c1b'
              toBalance: '0x010a56e8ff28edd831'
        simulation:
          id: 68031df7-16de-469d-ac9d-6947466a193b
          project_id: 1830efff-aa75-481e-b464-cedaf8b90960
          owner_id: 7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2
          network_id: '10'
          block_number: 109421606
          transaction_index: 8
          from: '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
          to: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
          input: >-
            0xe56461ad00000000000000000000000000000000000000000000000000000000000000380000000000000000000000005361b224b3af376fa234dc992c0f3595a325cbf7
          gas: 28694
          gas_price: '200648150'
          gas_used: 28694
          value: '530000000000000'
          method: depositNativeToken
          status: true
          access_list: null
          l1_message_sender: '0x0000000000000000000000000000000000000000'
          l1_block_number: 0
          l1_timestamp: 1694442010
          queue_origin: ''
          block_header:
            number: '0x685a426'
            hash: '0x0000000000000000000000000000000000000000000000000000000000000000'
            stateRoot: '0x8dc672b428d167e5221345d83927ebdf87ed5206e8566a3d958ce1b101c2ba6b'
            parentHash: '0x45c7aeb0285b005138d5c2d7afb3366d8ef31c7c18fbd5be049dd4ad783e0b54'
            sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
            transactionsRoot: '0xc77aa5b31077552213076a07c6823c82e7b41a3ac2a77793ba7333780cd842a0'
            receiptsRoot: '0xe031dd48bfd84b153f8c031d8998bce5bce33ccbcd7d0c503f34a792a2877495'
            logsBloom: >-
              0x8000002001000005404002800000400000000020040000000004000020000000050400001080024401002410011008100c00004000202008002000c00064024066000000080000092100200801806000108000000244008004001020403040211000400002040000000110000000080800001042200004800000001080aa00002002000002024000000002001001050000101040002101002000a0000802004002754000200000108000000440100282200c60006c00800800c10000000000008001000220000400110008040020100020e000000604020020000042001020040410884920a10200010000000000010010888020419008000380080010011040
            timestamp: '0x64ff2205'
            difficulty: '0x0'
            gasLimit: '0x1c9c380'
            gasUsed: '0x252cee'
            miner: '0x4200000000000000000000000000000000000011'
            extraData: 0x
            mixHash: '0x10160501d9bb7068011c56d6cf114a106df3ed6208ebc17e8d56fe02d8b3b343'
            nonce: '0x0000000000000000'
            baseFeePerGas: '0xbd0f029'
            size: '0x0'
            totalDifficulty: '0x0'
            uncles: null
            transactions: null
          mint: 0
          amount_to_mint: '0'
          deposit_tx: false
          system_tx: false
          nonce: 2
          addresses:
            - '0x5361b224b3af376fa234dc992c0f3595a325cbf7'
            - '0x5800249621da520adfdca16da20d8a5fc0f814d8'
          contract_ids:
            - eth:10:0x5361b224b3af376fa234dc992c0f3595a325cbf7
            - eth:10:0x5800249621da520adfdca16da20d8a5fc0f814d8
          shared: true
          created_at: '2023-12-08T21:33:14.689492043Z'
        contracts:
          - id: eth:10:0x5800249621da520adfdca16da20d8a5fc0f814d8
            contract_id: eth:10:0x5800249621da520adfdca16da20d8a5fc0f814d8
            balance: ''
            network_id: '10'
            public: true
            verified_by: etherscan
            verification_date: '2022-05-03T12:00:26Z'
            address: '0x5800249621da520adfdca16da20d8a5fc0f814d8'
            contract_name: GasMovr
            ens_domain: null
            type: contract
            evm_version: istanbul
            compiler_version: v0.8.4+commit.c7e474f2
            optimizations_used: false
            optimization_runs: 200
            libraries: null
            compiler_settings:
              optimizer:
                enabled: false
                runs: 200
              evmVersion: istanbul
            deployed_bytecode: >-
              0x6080604052600436106101185760003560e01c80638da5cb5b116100a0578063c537a1b111610064578063c537a1b1146103f2578063d1c85e8c1461041d578063d431b1ac14610446578063e56461ad14610471578063f2fde38b1461048d57610158565b80638da5cb5b146102fb578063982fb9d8146103265780639a21c64c14610363578063aeb45f011461038c578063b659e774146103c957610158565b80633a8ee97d116100e75780633a8ee97d1461022a5780634c9ef2f8146102535780635c975abb14610290578063715018a6146102bb57806385d9ef5a146102d257610158565b806307d9c5341461015d5780630a70b0561461019a5780630cf20cc9146101d85780630ddedd841461020157610158565b36610158577f5d8bc849764969eb1bcc6d0a2f55999d0167c1ccec240a4f39cf664ca9c4148e333460405161014e929190611e1b565b60405180910390a1005b600080fd5b34801561016957600080fd5b50610184600480360381019061017f9190611b17565b6104b6565b6040516101919190611e44565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611b40565b6104d6565b6040516101cf929190611f95565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa91906119d7565b610507565b005b34801561020d57600080fd5b5061022860048036038101906102239190611a13565b610591565b005b34801561023657600080fd5b50610251600480360381019061024c9190611937565b610827565b005b34801561025f57600080fd5b5061027a60048036038101906102759190611ba5565b6108af565b6040516102879190611e44565b60405180910390f35b34801561029c57600080fd5b506102a5610987565b6040516102b29190611e44565b60405180910390f35b3480156102c757600080fd5b506102d061099d565b005b3480156102de57600080fd5b506102f960048036038101906102f49190611937565b610a25565b005b34801561030757600080fd5b50610310610aad565b60405161031d9190611dc9565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190611937565b610ad6565b60405161035a9190611e44565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190611937565b610af6565b005b34801561039857600080fd5b506103b360048036038101906103ae9190611b40565b610b7f565b6040516103c09190611f5f565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190611ad2565b610bd1565b005b3480156103fe57600080fd5b50610407610d16565b6040516104149190611e44565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190611960565b610da9565b005b34801561045257600080fd5b5061045b610e8e565b6040516104689190611e44565b60405180910390f35b61048b60048036038101906104869190611b69565b610f21565b005b34801561049957600080fd5b506104b460048036038101906104af9190611937565b61101f565b005b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b61050f611117565b73ffffffffffffffffffffffffffffffffffffffff1661052d610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057a90611f1f565b60405180910390fd5b61058d828261111f565b5050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490611e5f565b60405180910390fd5b8351855114801561062f575082518551145b61066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590611f3f565b60405180910390fd5b60003a905060005b865181101561081e576000838783815181106106bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151116106d95784836106d491906120d9565b61073c565b84836106e591906120d9565b8488848151811061071f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516107319190612133565b61073b9190612083565b5b905061080a88838151811061077a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518884815181106107bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518885815181106107fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518461121e565b5080806108169061229c565b915050610676565b50505050505050565b61082f611117565b73ffffffffffffffffffffffffffffffffffffffff1661084d610aad565b73ffffffffffffffffffffffffffffffffffffffff16146108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90611f1f565b60405180910390fd5b6108ac8161137a565b50565b60006108b9611117565b73ffffffffffffffffffffffffffffffffffffffff166108d7610aad565b73ffffffffffffffffffffffffffffffffffffffff161461092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490611f1f565b60405180910390fd5b816001600085815260200190815260200160002060010160006101000a81548160ff0219169083151502179055506001600084815260200190815260200160002060010160009054906101000a900460ff16905092915050565b60008060149054906101000a900460ff16905090565b6109a5611117565b73ffffffffffffffffffffffffffffffffffffffff166109c3610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090611f1f565b60405180910390fd5b610a23600061140c565b565b610a2d611117565b73ffffffffffffffffffffffffffffffffffffffff16610a4b610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890611f1f565b60405180910390fd5b610aaa816114d0565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60036020528060005260406000206000915054906101000a900460ff1681565b610afe611117565b73ffffffffffffffffffffffffffffffffffffffff16610b1c610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6990611f1f565b60405180910390fd5b610b7c814761111f565b50565b610b876116a6565b60016000838152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff1615151515815250509050919050565b610bd9611117565b73ffffffffffffffffffffffffffffffffffffffff16610bf7610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490611f1f565b60405180910390fd5b60005b82829050811015610d1157828282818110610c94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506040020160016000858585818110610cd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050604002016000013581526020019081526020016000208181610cfb919061259a565b9050508080610d099061229c565b915050610c50565b505050565b6000610d20611117565b73ffffffffffffffffffffffffffffffffffffffff16610d3e610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90611f1f565b60405180910390fd5b610d9c611562565b610da4610987565b905090565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90611e5f565b60405180910390fd5b60003a90506000828611610e54578382610e4f91906120d9565b610e77565b8382610e6091906120d9565b8387610e6c9190612133565b610e769190612083565b5b9050610e858787878461121e565b50505050505050565b6000610e98611117565b73ffffffffffffffffffffffffffffffffffffffff16610eb6610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390611f1f565b60405180910390fd5b610f14611603565b610f1c610987565b905090565b610f29610987565b15610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090611eff565b60405180910390fd5b6001600083815260200190815260200160002060010160009054906101000a900460ff16610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390611e9f565b60405180910390fd5b818173ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15346040516110139190611f7a565b60405180910390a35050565b611027611117565b73ffffffffffffffffffffffffffffffffffffffff16611045610aad565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290611f1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290611ebf565b60405180910390fd5b6111148161140c565b50565b600033905090565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161114590611db4565b60006040518083038185875af1925050503d8060008114611182576040519150601f19603f3d011682016040523d82523d6000602084013e611187565b606091505b50509050806111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290611edf565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65836040516112119190611f7a565b60405180910390a2505050565b6002600083815260200190815260200160002060009054906101000a900460ff161561124957611374565b60016002600084815260200190815260200160002060006101000a81548160ff021916908315150217905550600081846112839190612133565b90507f2f824f69f211e444df15d741157e83cdf23c50f39399b9523853a84b91379ca68582856040516112b893929190611de4565b60405180910390a160008573ffffffffffffffffffffffffffffffffffffffff1682611388906040516112ea90611db4565b600060405180830381858888f193505050503d8060008114611328576040519150601f19603f3d011682016040523d82523d6000602084013e61132d565b606091505b5050905080611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890611edf565b60405180910390fd5b50505b50505050565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f81cdda5c32462d3b8852fb6c30821f5d90c45230475e9b29e517afa5fef7eb9a816040516114019190611dc9565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6d976a532ca2d9b73b2090e0fb183da92b74bfd91ca6f4562b82a86c0a4b0194816040516115579190611dc9565b60405180910390a150565b61156a610987565b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a090611e7f565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115ec611117565b6040516115f99190611dc9565b60405180910390a1565b61160b610987565b1561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290611eff565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861168f611117565b60405161169c9190611dc9565b60405180910390a1565b6040518060400160405280600081526020016000151581525090565b60006116d56116d084611fe3565b611fbe565b905080838252602082019050828560208602820111156116f457600080fd5b60005b85811015611724578161170a888261181b565b8452602084019350602083019250506001810190506116f7565b5050509392505050565b600061174161173c8461200f565b611fbe565b9050808382526020820190508285602086028201111561176057600080fd5b60005b858110156117905781611776888261190d565b845260208401935060208301925050600181019050611763565b5050509392505050565b60006117ad6117a88461203b565b611fbe565b905080838252602082019050828560208602820111156117cc57600080fd5b60005b858110156117fc57816117e28882611922565b8452602084019350602083019250506001810190506117cf565b5050509392505050565b600081359050611815816125cb565b92915050565b60008135905061182a816125e2565b92915050565b600082601f83011261184157600080fd5b81356118518482602086016116c2565b91505092915050565b600082601f83011261186b57600080fd5b813561187b84826020860161172e565b91505092915050565b60008083601f84011261189657600080fd5b8235905067ffffffffffffffff8111156118af57600080fd5b6020830191508360408202830111156118c757600080fd5b9250929050565b600082601f8301126118df57600080fd5b81356118ef84826020860161179a565b91505092915050565b600081359050611907816125f9565b92915050565b60008135905061191c81612610565b92915050565b60008135905061193181612627565b92915050565b60006020828403121561194957600080fd5b600061195784828501611806565b91505092915050565b600080600080600060a0868803121561197857600080fd5b60006119868882890161181b565b955050602061199788828901611922565b94505060406119a88882890161190d565b93505060606119b988828901611922565b92505060806119ca88828901611922565b9150509295509295909350565b600080604083850312156119ea57600080fd5b60006119f885828601611806565b9250506020611a0985828601611922565b9150509250929050565b600080600080600060a08688031215611a2b57600080fd5b600086013567ffffffffffffffff811115611a4557600080fd5b611a5188828901611830565b955050602086013567ffffffffffffffff811115611a6e57600080fd5b611a7a888289016118ce565b945050604086013567ffffffffffffffff811115611a9757600080fd5b611aa38882890161185a565b9350506060611ab488828901611922565b9250506080611ac588828901611922565b9150509295509295909350565b60008060208385031215611ae557600080fd5b600083013567ffffffffffffffff811115611aff57600080fd5b611b0b85828601611884565b92509250509250929050565b600060208284031215611b2957600080fd5b6000611b378482850161190d565b91505092915050565b600060208284031215611b5257600080fd5b6000611b6084828501611922565b91505092915050565b60008060408385031215611b7c57600080fd5b6000611b8a85828601611922565b9250506020611b9b85828601611806565b9150509250929050565b60008060408385031215611bb857600080fd5b6000611bc685828601611922565b9250506020611bd7858286016118f8565b9150509250929050565b611bea816121cb565b82525050565b611bf981612167565b82525050565b611c088161218b565b82525050565b611c178161218b565b82525050565b611c2681612197565b82525050565b6000611c39601483612072565b9150611c44826123a1565b602082019050919050565b6000611c5c601483612072565b9150611c67826123ca565b602082019050919050565b6000611c7f601b83612072565b9150611c8a826123f3565b602082019050919050565b6000611ca2602683612072565b9150611cad8261241c565b604082019050919050565b6000611cc5601483612072565b9150611cd08261246b565b602082019050919050565b6000611ce8601083612072565b9150611cf382612494565b602082019050919050565b6000611d0b602083612072565b9150611d16826124bd565b602082019050919050565b6000611d2e600083612067565b9150611d39826124e6565b600082019050919050565b6000611d51601583612072565b9150611d5c826124e9565b602082019050919050565b604082016000820151611d7d6000850182611d96565b506020820151611d906020850182611bff565b50505050565b611d9f816121c1565b82525050565b611dae816121c1565b82525050565b6000611dbf82611d21565b9150819050919050565b6000602082019050611dde6000830184611bf0565b92915050565b6000606082019050611df96000830186611be1565b611e066020830185611da5565b611e136040830184611c1d565b949350505050565b6000604082019050611e306000830185611bf0565b611e3d6020830184611da5565b9392505050565b6000602082019050611e596000830184611c0e565b92915050565b60006020820190508181036000830152611e7881611c2c565b9050919050565b60006020820190508181036000830152611e9881611c4f565b9050919050565b60006020820190508181036000830152611eb881611c72565b9050919050565b60006020820190508181036000830152611ed881611c95565b9050919050565b60006020820190508181036000830152611ef881611cb8565b9050919050565b60006020820190508181036000830152611f1881611cdb565b9050919050565b60006020820190508181036000830152611f3881611cfe565b9050919050565b60006020820190508181036000830152611f5881611d44565b9050919050565b6000604082019050611f746000830184611d67565b92915050565b6000602082019050611f8f6000830184611da5565b92915050565b6000604082019050611faa6000830185611da5565b611fb76020830184611c0e565b9392505050565b6000611fc8611fd9565b9050611fd4828261226b565b919050565b6000604051905090565b600067ffffffffffffffff821115611ffe57611ffd612314565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561202a57612029612314565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561205657612055612314565b5b602082029050602081019050919050565b600081905092915050565b600082825260208201905092915050565b600061208e826121c1565b9150612099836121c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156120ce576120cd6122e5565b5b828201905092915050565b60006120e4826121c1565b91506120ef836121c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612128576121276122e5565b5b828202905092915050565b600061213e826121c1565b9150612149836121c1565b92508282101561215c5761215b6122e5565b5b828203905092915050565b6000612172826121a1565b9050919050565b6000612184826121a1565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006121d6826121ef565b9050919050565b60006121e88261218b565b9050919050565b60006121fa82612201565b9050919050565b600061220c826121a1565b9050919050565b600061221e826121c1565b9050919050565b6000810160008301806122378161236d565b905061224381846125a8565b50505060018101602083018061225881612357565b90506122648184612577565b5050505050565b61227482612383565b810181811067ffffffffffffffff8211171561229357612292612314565b5b80604052505050565b60006122a7826121c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156122da576122d96122e5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b60008135612364816125f9565b80915050919050565b6000813561237a81612627565b80915050919050565b6000601f19601f8301169050919050565b60008160001b9050919050565b7f53656e64657220726f6c65207265717569726564000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f436861696e2069732063757272656e746c792064697361626c65640000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f496e707574206c656e677468206d69736d617463680000000000000000000000600082015250565b600060ff61251f84612394565b9350801983169250808416831791505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61256184612394565b9350801983169250808416831791505092915050565b612580826121dd565b61259361258c82612343565b8354612512565b8255505050565b6125a48282612225565b5050565b6125b182612213565b6125c46125bd8261234d565b8354612535565b8255505050565b6125d481612167565b81146125df57600080fd5b50565b6125eb81612179565b81146125f657600080fd5b50565b6126028161218b565b811461260d57600080fd5b50565b61261981612197565b811461262457600080fd5b50565b612630816121c1565b811461263b57600080fd5b5056fea2646970667358221220a20584266cfb1330ad52a32361fdcad1a8b049c48d067aac467033d13ddd4a8d64736f6c63430008040033
            creation_bytecode: >-
              0x60806040523480156200001157600080fd5b5062000032620000266200006360201b60201c565b6200006b60201b60201c565b60008060146101000a81548160ff0219169083151502179055506200005d336200012f60201b60201c565b62000225565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f81cdda5c32462d3b8852fb6c30821f5d90c45230475e9b29e517afa5fef7eb9a81604051620001b89190620001d4565b60405180910390a150565b620001ce81620001f1565b82525050565b6000602082019050620001eb6000830184620001c3565b92915050565b6000620001fe8262000205565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b61267480620002356000396000f3fe6080604052600436106101185760003560e01c80638da5cb5b116100a0578063c537a1b111610064578063c537a1b1146103f2578063d1c85e8c1461041d578063d431b1ac14610446578063e56461ad14610471578063f2fde38b1461048d57610158565b80638da5cb5b146102fb578063982fb9d8146103265780639a21c64c14610363578063aeb45f011461038c578063b659e774146103c957610158565b80633a8ee97d116100e75780633a8ee97d1461022a5780634c9ef2f8146102535780635c975abb14610290578063715018a6146102bb57806385d9ef5a146102d257610158565b806307d9c5341461015d5780630a70b0561461019a5780630cf20cc9146101d85780630ddedd841461020157610158565b36610158577f5d8bc849764969eb1bcc6d0a2f55999d0167c1ccec240a4f39cf664ca9c4148e333460405161014e929190611e1b565b60405180910390a1005b600080fd5b34801561016957600080fd5b50610184600480360381019061017f9190611b17565b6104b6565b6040516101919190611e44565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611b40565b6104d6565b6040516101cf929190611f95565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa91906119d7565b610507565b005b34801561020d57600080fd5b5061022860048036038101906102239190611a13565b610591565b005b34801561023657600080fd5b50610251600480360381019061024c9190611937565b610827565b005b34801561025f57600080fd5b5061027a60048036038101906102759190611ba5565b6108af565b6040516102879190611e44565b60405180910390f35b34801561029c57600080fd5b506102a5610987565b6040516102b29190611e44565b60405180910390f35b3480156102c757600080fd5b506102d061099d565b005b3480156102de57600080fd5b506102f960048036038101906102f49190611937565b610a25565b005b34801561030757600080fd5b50610310610aad565b60405161031d9190611dc9565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190611937565b610ad6565b60405161035a9190611e44565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190611937565b610af6565b005b34801561039857600080fd5b506103b360048036038101906103ae9190611b40565b610b7f565b6040516103c09190611f5f565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190611ad2565b610bd1565b005b3480156103fe57600080fd5b50610407610d16565b6040516104149190611e44565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190611960565b610da9565b005b34801561045257600080fd5b5061045b610e8e565b6040516104689190611e44565b60405180910390f35b61048b60048036038101906104869190611b69565b610f21565b005b34801561049957600080fd5b506104b460048036038101906104af9190611937565b61101f565b005b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b61050f611117565b73ffffffffffffffffffffffffffffffffffffffff1661052d610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057a90611f1f565b60405180910390fd5b61058d828261111f565b5050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490611e5f565b60405180910390fd5b8351855114801561062f575082518551145b61066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590611f3f565b60405180910390fd5b60003a905060005b865181101561081e576000838783815181106106bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151116106d95784836106d491906120d9565b61073c565b84836106e591906120d9565b8488848151811061071f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516107319190612133565b61073b9190612083565b5b905061080a88838151811061077a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518884815181106107bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518885815181106107fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518461121e565b5080806108169061229c565b915050610676565b50505050505050565b61082f611117565b73ffffffffffffffffffffffffffffffffffffffff1661084d610aad565b73ffffffffffffffffffffffffffffffffffffffff16146108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90611f1f565b60405180910390fd5b6108ac8161137a565b50565b60006108b9611117565b73ffffffffffffffffffffffffffffffffffffffff166108d7610aad565b73ffffffffffffffffffffffffffffffffffffffff161461092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490611f1f565b60405180910390fd5b816001600085815260200190815260200160002060010160006101000a81548160ff0219169083151502179055506001600084815260200190815260200160002060010160009054906101000a900460ff16905092915050565b60008060149054906101000a900460ff16905090565b6109a5611117565b73ffffffffffffffffffffffffffffffffffffffff166109c3610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090611f1f565b60405180910390fd5b610a23600061140c565b565b610a2d611117565b73ffffffffffffffffffffffffffffffffffffffff16610a4b610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890611f1f565b60405180910390fd5b610aaa816114d0565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60036020528060005260406000206000915054906101000a900460ff1681565b610afe611117565b73ffffffffffffffffffffffffffffffffffffffff16610b1c610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6990611f1f565b60405180910390fd5b610b7c814761111f565b50565b610b876116a6565b60016000838152602001908152602001600020604051806040016040529081600082015481526020016001820160009054906101000a900460ff1615151515815250509050919050565b610bd9611117565b73ffffffffffffffffffffffffffffffffffffffff16610bf7610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490611f1f565b60405180910390fd5b60005b82829050811015610d1157828282818110610c94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506040020160016000858585818110610cd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050604002016000013581526020019081526020016000208181610cfb919061259a565b9050508080610d099061229c565b915050610c50565b505050565b6000610d20611117565b73ffffffffffffffffffffffffffffffffffffffff16610d3e610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90611f1f565b60405180910390fd5b610d9c611562565b610da4610987565b905090565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90611e5f565b60405180910390fd5b60003a90506000828611610e54578382610e4f91906120d9565b610e77565b8382610e6091906120d9565b8387610e6c9190612133565b610e769190612083565b5b9050610e858787878461121e565b50505050505050565b6000610e98611117565b73ffffffffffffffffffffffffffffffffffffffff16610eb6610aad565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390611f1f565b60405180910390fd5b610f14611603565b610f1c610987565b905090565b610f29610987565b15610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090611eff565b60405180910390fd5b6001600083815260200190815260200160002060010160009054906101000a900460ff16610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390611e9f565b60405180910390fd5b818173ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15346040516110139190611f7a565b60405180910390a35050565b611027611117565b73ffffffffffffffffffffffffffffffffffffffff16611045610aad565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290611f1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290611ebf565b60405180910390fd5b6111148161140c565b50565b600033905090565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161114590611db4565b60006040518083038185875af1925050503d8060008114611182576040519150601f19603f3d011682016040523d82523d6000602084013e611187565b606091505b50509050806111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290611edf565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65836040516112119190611f7a565b60405180910390a2505050565b6002600083815260200190815260200160002060009054906101000a900460ff161561124957611374565b60016002600084815260200190815260200160002060006101000a81548160ff021916908315150217905550600081846112839190612133565b90507f2f824f69f211e444df15d741157e83cdf23c50f39399b9523853a84b91379ca68582856040516112b893929190611de4565b60405180910390a160008573ffffffffffffffffffffffffffffffffffffffff1682611388906040516112ea90611db4565b600060405180830381858888f193505050503d8060008114611328576040519150601f19603f3d011682016040523d82523d6000602084013e61132d565b606091505b5050905080611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890611edf565b60405180910390fd5b50505b50505050565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f81cdda5c32462d3b8852fb6c30821f5d90c45230475e9b29e517afa5fef7eb9a816040516114019190611dc9565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6d976a532ca2d9b73b2090e0fb183da92b74bfd91ca6f4562b82a86c0a4b0194816040516115579190611dc9565b60405180910390a150565b61156a610987565b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a090611e7f565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115ec611117565b6040516115f99190611dc9565b60405180910390a1565b61160b610987565b1561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290611eff565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861168f611117565b60405161169c9190611dc9565b60405180910390a1565b6040518060400160405280600081526020016000151581525090565b60006116d56116d084611fe3565b611fbe565b905080838252602082019050828560208602820111156116f457600080fd5b60005b85811015611724578161170a888261181b565b8452602084019350602083019250506001810190506116f7565b5050509392505050565b600061174161173c8461200f565b611fbe565b9050808382526020820190508285602086028201111561176057600080fd5b60005b858110156117905781611776888261190d565b845260208401935060208301925050600181019050611763565b5050509392505050565b60006117ad6117a88461203b565b611fbe565b905080838252602082019050828560208602820111156117cc57600080fd5b60005b858110156117fc57816117e28882611922565b8452602084019350602083019250506001810190506117cf565b5050509392505050565b600081359050611815816125cb565b92915050565b60008135905061182a816125e2565b92915050565b600082601f83011261184157600080fd5b81356118518482602086016116c2565b91505092915050565b600082601f83011261186b57600080fd5b813561187b84826020860161172e565b91505092915050565b60008083601f84011261189657600080fd5b8235905067ffffffffffffffff8111156118af57600080fd5b6020830191508360408202830111156118c757600080fd5b9250929050565b600082601f8301126118df57600080fd5b81356118ef84826020860161179a565b91505092915050565b600081359050611907816125f9565b92915050565b60008135905061191c81612610565b92915050565b60008135905061193181612627565b92915050565b60006020828403121561194957600080fd5b600061195784828501611806565b91505092915050565b600080600080600060a0868803121561197857600080fd5b60006119868882890161181b565b955050602061199788828901611922565b94505060406119a88882890161190d565b93505060606119b988828901611922565b92505060806119ca88828901611922565b9150509295509295909350565b600080604083850312156119ea57600080fd5b60006119f885828601611806565b9250506020611a0985828601611922565b9150509250929050565b600080600080600060a08688031215611a2b57600080fd5b600086013567ffffffffffffffff811115611a4557600080fd5b611a5188828901611830565b955050602086013567ffffffffffffffff811115611a6e57600080fd5b611a7a888289016118ce565b945050604086013567ffffffffffffffff811115611a9757600080fd5b611aa38882890161185a565b9350506060611ab488828901611922565b9250506080611ac588828901611922565b9150509295509295909350565b60008060208385031215611ae557600080fd5b600083013567ffffffffffffffff811115611aff57600080fd5b611b0b85828601611884565b92509250509250929050565b600060208284031215611b2957600080fd5b6000611b378482850161190d565b91505092915050565b600060208284031215611b5257600080fd5b6000611b6084828501611922565b91505092915050565b60008060408385031215611b7c57600080fd5b6000611b8a85828601611922565b9250506020611b9b85828601611806565b9150509250929050565b60008060408385031215611bb857600080fd5b6000611bc685828601611922565b9250506020611bd7858286016118f8565b9150509250929050565b611bea816121cb565b82525050565b611bf981612167565b82525050565b611c088161218b565b82525050565b611c178161218b565b82525050565b611c2681612197565b82525050565b6000611c39601483612072565b9150611c44826123a1565b602082019050919050565b6000611c5c601483612072565b9150611c67826123ca565b602082019050919050565b6000611c7f601b83612072565b9150611c8a826123f3565b602082019050919050565b6000611ca2602683612072565b9150611cad8261241c565b604082019050919050565b6000611cc5601483612072565b9150611cd08261246b565b602082019050919050565b6000611ce8601083612072565b9150611cf382612494565b602082019050919050565b6000611d0b602083612072565b9150611d16826124bd565b602082019050919050565b6000611d2e600083612067565b9150611d39826124e6565b600082019050919050565b6000611d51601583612072565b9150611d5c826124e9565b602082019050919050565b604082016000820151611d7d6000850182611d96565b506020820151611d906020850182611bff565b50505050565b611d9f816121c1565b82525050565b611dae816121c1565b82525050565b6000611dbf82611d21565b9150819050919050565b6000602082019050611dde6000830184611bf0565b92915050565b6000606082019050611df96000830186611be1565b611e066020830185611da5565b611e136040830184611c1d565b949350505050565b6000604082019050611e306000830185611bf0565b611e3d6020830184611da5565b9392505050565b6000602082019050611e596000830184611c0e565b92915050565b60006020820190508181036000830152611e7881611c2c565b9050919050565b60006020820190508181036000830152611e9881611c4f565b9050919050565b60006020820190508181036000830152611eb881611c72565b9050919050565b60006020820190508181036000830152611ed881611c95565b9050919050565b60006020820190508181036000830152611ef881611cb8565b9050919050565b60006020820190508181036000830152611f1881611cdb565b9050919050565b60006020820190508181036000830152611f3881611cfe565b9050919050565b60006020820190508181036000830152611f5881611d44565b9050919050565b6000604082019050611f746000830184611d67565b92915050565b6000602082019050611f8f6000830184611da5565b92915050565b6000604082019050611faa6000830185611da5565b611fb76020830184611c0e565b9392505050565b6000611fc8611fd9565b9050611fd4828261226b565b919050565b6000604051905090565b600067ffffffffffffffff821115611ffe57611ffd612314565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561202a57612029612314565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561205657612055612314565b5b602082029050602081019050919050565b600081905092915050565b600082825260208201905092915050565b600061208e826121c1565b9150612099836121c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156120ce576120cd6122e5565b5b828201905092915050565b60006120e4826121c1565b91506120ef836121c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612128576121276122e5565b5b828202905092915050565b600061213e826121c1565b9150612149836121c1565b92508282101561215c5761215b6122e5565b5b828203905092915050565b6000612172826121a1565b9050919050565b6000612184826121a1565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006121d6826121ef565b9050919050565b60006121e88261218b565b9050919050565b60006121fa82612201565b9050919050565b600061220c826121a1565b9050919050565b600061221e826121c1565b9050919050565b6000810160008301806122378161236d565b905061224381846125a8565b50505060018101602083018061225881612357565b90506122648184612577565b5050505050565b61227482612383565b810181811067ffffffffffffffff8211171561229357612292612314565b5b80604052505050565b60006122a7826121c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156122da576122d96122e5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b60008135612364816125f9565b80915050919050565b6000813561237a81612627565b80915050919050565b6000601f19601f8301169050919050565b60008160001b9050919050565b7f53656e64657220726f6c65207265717569726564000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f436861696e2069732063757272656e746c792064697361626c65640000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f496e707574206c656e677468206d69736d617463680000000000000000000000600082015250565b600060ff61251f84612394565b9350801983169250808416831791505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61256184612394565b9350801983169250808416831791505092915050565b612580826121dd565b61259361258c82612343565b8354612512565b8255505050565b6125a48282612225565b5050565b6125b182612213565b6125c46125bd8261234d565b8354612535565b8255505050565b6125d481612167565b81146125df57600080fd5b50565b6125eb81612179565b81146125f657600080fd5b50565b6126028161218b565b811461260d57600080fd5b50565b61261981612197565b811461262457600080fd5b50565b612630816121c1565b811461263b57600080fd5b5056fea2646970667358221220a20584266cfb1330ad52a32361fdcad1a8b049c48d067aac467033d13ddd4a8d64736f6c63430008040033
            data:
              main_contract: 3
              contract_info:
                - id: 3
                  path: contracts/GasMovr.sol
                  name: GasMovr.sol
                  source: |
                    // SPDX-License-Identifier: MIT

                    pragma solidity >0.8.0;

                    import "@openzeppelin/contracts/access/Ownable.sol";
                    import "@openzeppelin/contracts/security/Pausable.sol";

                    contract GasMovr is Ownable, Pausable {
                        /* 
                            Variables
                        */
                        mapping(uint256 => ChainData) public chainConfig;
                        mapping(bytes32 => bool) public processedHashes;
                        mapping(address => bool) public senders;

                        struct ChainData {
                            uint256 chainId;
                            bool isEnabled;
                        }

                        /* 
                            Events
                        */
                        event Deposit(
                            address indexed destinationReceiver,
                            uint256 amount,
                            uint256 indexed destinationChainId
                        );

                        event Withdrawal(address indexed receiver, uint256 amount);

                        event Donation(address sender, uint256 amount);

                        event Send(address receiver, uint256 amount, bytes32 srcChainTxHash);

                        event GrantSender(address sender);
                        event RevokeSender(address sender);

                        modifier onlySender() {
                            require(senders[msg.sender], "Sender role required");
                            _;
                        }

                        constructor() {
                            _grantSenderRole(msg.sender);
                        }

                        receive() external payable {
                            emit Donation(msg.sender, msg.value);
                        }

                        function depositNativeToken(uint256 destinationChainId, address _to)
                            public
                            payable
                            whenNotPaused
                        {
                            require(
                                chainConfig[destinationChainId].isEnabled,
                                "Chain is currently disabled"
                            );

                            emit Deposit(_to, msg.value, destinationChainId);
                        }

                        function withdrawBalance(address _to, uint256 _amount) public onlyOwner {
                            _withdrawBalance(_to, _amount);
                        }

                        function withdrawFullBalance(address _to) public onlyOwner {
                            _withdrawBalance(_to, address(this).balance);
                        }

                        function _withdrawBalance(address _to, uint256 _amount) private {
                            (bool success, ) = _to.call{value: _amount}("");
                            require(success, "Failed to send Ether");

                            emit Withdrawal(_to, _amount);
                        }

                        function setIsEnabled(uint256 chainId, bool _isEnabled)
                            public
                            onlyOwner
                            returns (bool)
                        {
                            chainConfig[chainId].isEnabled = _isEnabled;
                            return chainConfig[chainId].isEnabled;
                        }

                        function setPause() public onlyOwner returns (bool) {
                            _pause();
                            return paused();
                        }

                        function setUnPause() public onlyOwner returns (bool) {
                            _unpause();
                            return paused();
                        }

                        function addRoutes(ChainData[] calldata _routes) external onlyOwner {
                            for (uint256 i = 0; i < _routes.length; i++) {
                                chainConfig[_routes[i].chainId] = _routes[i];
                            }
                        }

                        function getChainData(uint256 chainId)
                            public
                            view
                            returns (ChainData memory)
                        {
                            return (chainConfig[chainId]);
                        }

                        function batchSendNativeToken(
                            address payable[] memory receivers,
                            uint256[] memory amounts,
                            bytes32[] memory srcChainTxHashes,
                            uint256 perUserGasAmount,
                            uint256 maxLimit
                        ) public onlySender {
                            require(
                                receivers.length == amounts.length &&
                                    receivers.length == srcChainTxHashes.length,
                                "Input length mismatch"
                            );
                            uint256 gasPrice;
                            assembly {
                                gasPrice := gasprice()
                            }

                            for (uint256 i = 0; i < receivers.length; i++) {
                                uint256 _gasFees = amounts[i] > maxLimit
                                    ? (amounts[i] - maxLimit + (gasPrice * perUserGasAmount))
                                    : gasPrice * perUserGasAmount;
                                _sendNativeToken(
                                    receivers[i],
                                    amounts[i],
                                    srcChainTxHashes[i],
                                    _gasFees
                                );
                            }
                        }

                        function sendNativeToken(
                            address payable receiver,
                            uint256 amount,
                            bytes32 srcChainTxHash,
                            uint256 perUserGasAmount,
                            uint256 maxLimit
                        ) public onlySender {
                            uint256 gasPrice;
                            assembly {
                                gasPrice := gasprice()
                            }
                            uint256 _gasFees = amount > maxLimit
                                ? (amount - maxLimit + (gasPrice * perUserGasAmount))
                                : gasPrice * perUserGasAmount;

                            _sendNativeToken(receiver, amount, srcChainTxHash, _gasFees);
                        }

                        function _sendNativeToken(
                            address payable receiver,
                            uint256 amount,
                            bytes32 srcChainTxHash,
                            uint256 gasFees
                        ) private {
                            if (processedHashes[srcChainTxHash]) return;
                            processedHashes[srcChainTxHash] = true;

                            uint256 sendAmount = amount - gasFees;

                            emit Send(receiver, sendAmount, srcChainTxHash);

                            (bool success, ) = receiver.call{value: sendAmount, gas: 5000}("");
                            require(success, "Failed to send Ether");
                        }

                        function grantSenderRole(address sender) public onlyOwner {
                            _grantSenderRole(sender);
                        }

                        function revokeSenderRole(address sender) public onlyOwner {
                            _revokeSenderRole(sender);
                        }

                        function _grantSenderRole(address sender) private {
                            senders[sender] = true;
                            emit GrantSender(sender);
                        }

                        function _revokeSenderRole(address sender) private {
                            senders[sender] = false;
                            emit RevokeSender(sender);
                        }
                    }
                - id: 0
                  path: '@openzeppelin/contracts/access/Ownable.sol'
                  name: Ownable.sol
                  source: |
                    // SPDX-License-Identifier: MIT
                    // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

                    pragma solidity ^0.8.0;

                    import "../utils/Context.sol";

                    /**
                     * @dev Contract module which provides a basic access control mechanism, where
                     * there is an account (an owner) that can be granted exclusive access to
                     * specific functions.
                     *
                     * By default, the owner account will be the one that deploys the contract. This
                     * can later be changed with {transferOwnership}.
                     *
                     * This module is used through inheritance. It will make available the modifier
                     * `onlyOwner`, which can be applied to your functions to restrict their use to
                     * the owner.
                     */
                    abstract contract Ownable is Context {
                        address private _owner;

                        event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

                        /**
                         * @dev Initializes the contract setting the deployer as the initial owner.
                         */
                        constructor() {
                            _transferOwnership(_msgSender());
                        }

                        /**
                         * @dev Returns the address of the current owner.
                         */
                        function owner() public view virtual returns (address) {
                            return _owner;
                        }

                        /**
                         * @dev Throws if called by any account other than the owner.
                         */
                        modifier onlyOwner() {
                            require(owner() == _msgSender(), "Ownable: caller is not the owner");
                            _;
                        }

                        /**
                         * @dev Leaves the contract without owner. It will not be possible to call
                         * `onlyOwner` functions anymore. Can only be called by the current owner.
                         *
                         * NOTE: Renouncing ownership will leave the contract without an owner,
                         * thereby removing any functionality that is only available to the owner.
                         */
                        function renounceOwnership() public virtual onlyOwner {
                            _transferOwnership(address(0));
                        }

                        /**
                         * @dev Transfers ownership of the contract to a new account (`newOwner`).
                         * Can only be called by the current owner.
                         */
                        function transferOwnership(address newOwner) public virtual onlyOwner {
                            require(newOwner != address(0), "Ownable: new owner is the zero address");
                            _transferOwnership(newOwner);
                        }

                        /**
                         * @dev Transfers ownership of the contract to a new account (`newOwner`).
                         * Internal function without access restriction.
                         */
                        function _transferOwnership(address newOwner) internal virtual {
                            address oldOwner = _owner;
                            _owner = newOwner;
                            emit OwnershipTransferred(oldOwner, newOwner);
                        }
                    }
                - id: 1
                  path: '@openzeppelin/contracts/security/Pausable.sol'
                  name: Pausable.sol
                  source: |
                    // SPDX-License-Identifier: MIT
                    // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol)

                    pragma solidity ^0.8.0;

                    import "../utils/Context.sol";

                    /**
                     * @dev Contract module which allows children to implement an emergency stop
                     * mechanism that can be triggered by an authorized account.
                     *
                     * This module is used through inheritance. It will make available the
                     * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
                     * the functions of your contract. Note that they will not be pausable by
                     * simply including this module, only once the modifiers are put in place.
                     */
                    abstract contract Pausable is Context {
                        /**
                         * @dev Emitted when the pause is triggered by `account`.
                         */
                        event Paused(address account);

                        /**
                         * @dev Emitted when the pause is lifted by `account`.
                         */
                        event Unpaused(address account);

                        bool private _paused;

                        /**
                         * @dev Initializes the contract in unpaused state.
                         */
                        constructor() {
                            _paused = false;
                        }

                        /**
                         * @dev Returns true if the contract is paused, and false otherwise.
                         */
                        function paused() public view virtual returns (bool) {
                            return _paused;
                        }

                        /**
                         * @dev Modifier to make a function callable only when the contract is not paused.
                         *
                         * Requirements:
                         *
                         * - The contract must not be paused.
                         */
                        modifier whenNotPaused() {
                            require(!paused(), "Pausable: paused");
                            _;
                        }

                        /**
                         * @dev Modifier to make a function callable only when the contract is paused.
                         *
                         * Requirements:
                         *
                         * - The contract must be paused.
                         */
                        modifier whenPaused() {
                            require(paused(), "Pausable: not paused");
                            _;
                        }

                        /**
                         * @dev Triggers stopped state.
                         *
                         * Requirements:
                         *
                         * - The contract must not be paused.
                         */
                        function _pause() internal virtual whenNotPaused {
                            _paused = true;
                            emit Paused(_msgSender());
                        }

                        /**
                         * @dev Returns to normal state.
                         *
                         * Requirements:
                         *
                         * - The contract must be paused.
                         */
                        function _unpause() internal virtual whenPaused {
                            _paused = false;
                            emit Unpaused(_msgSender());
                        }
                    }
                - id: 2
                  path: '@openzeppelin/contracts/utils/Context.sol'
                  name: Context.sol
                  source: |
                    // SPDX-License-Identifier: MIT
                    // OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

                    pragma solidity ^0.8.0;

                    /**
                     * @dev Provides information about the current execution context, including the
                     * sender of the transaction and its data. While these are generally available
                     * via msg.sender and msg.data, they should not be accessed in such a direct
                     * manner, since when dealing with meta-transactions the account sending and
                     * paying for execution may not be the actual sender (as far as an application
                     * is concerned).
                     *
                     * This contract is only required for intermediate, library-like contracts.
                     */
                    abstract contract Context {
                        function _msgSender() internal view virtual returns (address) {
                            return msg.sender;
                        }

                        function _msgData() internal view virtual returns (bytes calldata) {
                            return msg.data;
                        }
                    }
              abi:
                - ...
              raw_abi:
                - ...
              states:
                - name: _paused
                  type: bool
                  storage_location: storage
                  offset: 160
                  index: >-
                    0x0000000000000000000000000000000000000000000000000000000000000000
                  indexed: false
                  simple_type:
                    type: bool
                - name: chainConfig
                  type: mapping (uint256 => tuple)
                  storage_location: memory
                  components:
                    - name: chainId
                      type: uint256
                      storage_location: memory
                      offset: 0
                      index: >-
                        0xb607cc36270bbbb376b98f602ec3a5ec6c4fe7cf0d42af35fd17a642242d24fd
                      indexed: false
                      simple_type:
                        type: uint
                    - name: isEnabled
                      type: bool
                      storage_location: memory
                      offset: 0
                      index: >-
                        0xb607cc36270bbbb376b98f602ec3a5ec6c4fe7cf0d42af35fd17a642242d24fe
                      indexed: false
                      simple_type:
                        type: bool
                  offset: 0
                  index: >-
                    0x0000000000000000000000000000000000000000000000000000000000000001
                  indexed: false
                - name: processedHashes
                  type: mapping (bytes32 => bool)
                  storage_location: storage
                  offset: 0
                  index: >-
                    0x0000000000000000000000000000000000000000000000000000000000000002
                  indexed: false
                - name: senders
                  type: mapping (address => bool)
                  storage_location: storage
                  offset: 0
                  index: >-
                    0x0000000000000000000000000000000000000000000000000000000000000003
                  indexed: false
                - name: _owner
                  type: address
                  storage_location: storage
                  offset: 0
                  index: >-
                    0x0000000000000000000000000000000000000000000000000000000000000000
                  indexed: false
                  simple_type:
                    type: address
            src_map:
              ...: ...
            creation_block: 0
            creation_tx: ''
            creator_address: ''
            created_at: '2022-05-03T12:00:26Z'
            language: solidity
            in_project: false
        generated_access_list:
          - address: '0x420000000000000000000000000000000000001a'
          - address: '0x4200000000000000000000000000000000000019'
          - address: '0x4200000000000000000000000000000000000015'
            storage_keys:
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000003
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000004
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000005
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000006
              - >-
                0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000000
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000001
              - >-
                0x0000000000000000000000000000000000000000000000000000000000000002
    error:
      type: object
      properties:
        error:
          type: object
          properties:
            id:
              description: >-
                Endpoints include an error ID that should be  provided when
                reporting bugs or opening support tickets to help  identify the
                issue.
              type: string
              example: 4d9d8375-3c56-4925-a3e7-eb137fed17e9
            slug:
              description: >-
                A short identifier corresponding to the HTTP status code
                returned. For  example, the ID for a response returning a 404
                status code would be "not_found."
              type: string
              example: not_found
            message:
              description: >-
                A message providing additional information about the error,
                including  details to help resolve it when possible.
              type: string
              example: The resource you were accessing could not be found.
            data:
              description: Additional context about the error.
              type: object
              properties:
                rid:
                  description: >-
                    Resource identifier indicating which resource type caused
                    the error.
                  type: string
                  enum:
                    - rid:account
                    - rid:project
                    - rid:alert
                    - rid:contract
                    - rid:delivery_channel
                    - rid:network
                    - rid:simulation
                    - rid:vnet
                    - rid:wallet
                    - rid:action
                    - rid:action_call
                  example: rid:project
              additionalProperties: true
          required:
            - id
            - slug
            - message
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      name: X-Access-Key
      in: header
      description: >-
        An API key is a token that a client provides when making API calls. Send
        it as the `X-Access-Key` request header on any endpoint:


        ```bash

        curl '<API_ENDPOINT>' \
          -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
          ...
        ```


        Learn how to generate API access tokens at [Tenderly
        Docs](https://docs.tenderly.co/account/projects/how-to-generate-api-access-token).
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Bearer authentication (also called token authentication) is an HTTP
        authentication scheme that involves security tokens called bearer
        tokens.

        The bearer token is a cryptic string, usually generated by the server in
        response to a login request. The client must send this token in

        the Authorization header when making requests to protected resources:


        ```bash

        curl '<API_ENDPOINT>' \
          -H 'Authorization: Bearer <TENDERLY_TOKEN>' \
          ...
        ```


        **Note**: Bearer tokens cannot be revoked and expire after 30 days.

````