{
  "_format": "hh-sol-artifact-1",
  "contractName": "OptimismHubConnector",
  "sourceName": "contracts/messaging/connectors/optimism/OptimismHubConnector.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_mirrorDomain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_amb",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rootManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stateCommitmentChain",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gasCap",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "Connector__processMessage_notUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_noProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TypedMemView__index_indexMoreThan32Bytes",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loc",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "len",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slice",
          "type": "uint256"
        }
      ],
      "name": "TypedMemView__index_overrun",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_previous",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_updated",
          "type": "uint256"
        }
      ],
      "name": "GasCapUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageProcessed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "encodedData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "MessageSent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "current",
          "type": "address"
        }
      ],
      "name": "MirrorConnectorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "mirrorDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "amb",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "rootManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "mirrorConnector",
          "type": "address"
        }
      ],
      "name": "NewConnector",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposedOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "AMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIRROR_DOMAIN",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROOT_MANAGER",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptProposedOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mirrorConnector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "processMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_messageNonce",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "batchIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "batchRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "batchSize",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "prevTotalElements",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "extraData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ChainBatchHeader",
              "name": "stateRootBatchHeader",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "siblings",
                  "type": "bytes32[]"
                }
              ],
              "internalType": "struct ChainInclusionProof",
              "name": "stateRootProof",
              "type": "tuple"
            },
            {
              "internalType": "bytes",
              "name": "stateTrieWitness",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "storageTrieWitness",
              "type": "bytes"
            }
          ],
          "internalType": "struct L2MessageInclusionProof",
          "name": "_proof",
          "type": "tuple"
        }
      ],
      "name": "processMessageFromRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "processed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newlyProposed",
          "type": "address"
        }
      ],
      "name": "proposeNewOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposed",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounced",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_encodedData",
          "type": "bytes"
        }
      ],
      "name": "sendMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_gasCap",
          "type": "uint256"
        }
      ],
      "name": "setGasCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_mirrorConnector",
          "type": "address"
        }
      ],
      "name": "setMirrorConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stateCommitmentChain",
      "outputs": [
        {
          "internalType": "contract IStateCommitmentChain",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_expected",
          "type": "address"
        }
      ],
      "name": "verifySender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101206040523480156200001257600080fd5b50604051620031b8380380620031b88339810160408190526200003591620002eb565b8080888888888884848484846200004c33620001aa565b8463ffffffff16600003620000975760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e35760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b60448201526064016200008e565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011b576200011b816200020f565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a3505050505050505050506200018e816200027860201b60201c565b5050506001600160a01b03166101005250620003779350505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b805163ffffffff81168114620002ce57600080fd5b919050565b80516001600160a01b0381168114620002ce57600080fd5b600080600080600080600060e0888a0312156200030757600080fd5b6200031288620002b9565b96506200032260208901620002b9565b95506200033260408901620002d3565b94506200034260608901620002d3565b93506200035260808901620002d3565b92506200036260a08901620002d3565b915060c0880151905092959891949750929550565b60805160a05160c05160e05161010051612dcb620003ed6000396000818161014c0152610ed301526000818161019d015261075401526000818161028e0152818161046a015261078f01526000818161041d0152818161051f01528181610afd0152610e880152600061023a0152612dcb6000f3fe60806040526004361061012e5760003560e01c8063715018a6116100ab578063c5b350df1161006f578063c5b350df14610399578063cc394283146103ae578063d1851c92146103ce578063d232c220146103ec578063d69f9d611461040b578063db1b76591461043f57600080fd5b8063715018a6146102e65780637850b020146102fb5780638da5cb5b1461031b578063b1f8100d14610339578063c1f0808a1461035957600080fd5b806352a9674b116100f257806352a9674b146102285780635bd11efc1461025c5780635f61e3ec1461027c5780636a42b8f8146102b05780636e2edb4e146102c657600080fd5b80630f329ef81461013a578063141684161461018b5780633cf52ffb146101d457806348e6fa23146101f35780634ff746f61461020857600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019757600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610182565b3480156101e057600080fd5b506002545b604051908152602001610182565b610206610201366004612687565b61045f565b005b34801561021457600080fd5b506102066102233660046126eb565b610514565b34801561023457600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026857600080fd5b5061020661027736600461273d565b6105ba565b34801561028857600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102bc57600080fd5b5062093a806101e5565b3480156102d257600080fd5b506102066102e13660046128a3565b6105f1565b3480156102f257600080fd5b5061020661084e565b34801561030757600080fd5b506102066103163660046129dc565b610902565b34801561032757600080fd5b506000546001600160a01b031661016e565b34801561034557600080fd5b5061020661035436600461273d565b610936565b34801561036557600080fd5b506103896103743660046129dc565b60056020526000908152604090205460ff1681565b6040519015158152602001610182565b3480156103a557600080fd5b506102066109d4565b3480156103ba57600080fd5b5060035461016e906001600160a01b031681565b3480156103da57600080fd5b506001546001600160a01b031661016e565b3480156103f857600080fd5b506000546001600160a01b031615610389565b34801561041757600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044b57600080fd5b5061038961045a36600461273d565b610a44565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104cb5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6104d58282610a55565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161050893929190612a45565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105755760405162461bcd60e51b81526004016104c29060208082526004908201526310a0a6a160e11b604082015260600190565b61057e81610b6c565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105af929190612a83565b60405180910390a150565b6000546001600160a01b031633146105e5576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610b85565b50565b6003546001600160a01b038581169116146106415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016104c2565b6001600160a01b03851630146106815760405162461bcd60e51b8152602060048201526005602482015264217468697360d81b60448201526064016104c2565b600061068f86868686610bee565b905061069b8183610c3b565b6106d05760405162461bcd60e51b815260206004820152600660248201526510b83937b7b360d11b60448201526064016104c2565b60006106dc8582610c5e565b905060006107136106fb6020601885901c6001600160601b0316612ac3565b62ffffff198416906001600160601b03166020610c82565b60008181526005602052604090205490915060ff166108445760008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166004820152602481018290526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e7d93fa90604401600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8160405160200161081f91815260200190565b60408051601f198184030181529082905261083b913390612a83565b60405180910390a15b5050505050505050565b6000546001600160a01b03163314610879576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261088b9190612aea565b116108a9576040516324e0285f60e21b815260040160405180910390fd5b6002546000036108cc57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156108f6576040516323295ef960e01b815260040160405180910390fd5b6109006000610d8d565b565b6000546001600160a01b0316331461092d576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610df2565b6000546001600160a01b03163314610961576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561097f575060025415155b1561099d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036109cb57604051634a2fb73f60e11b815260040160405180910390fd5b6105ee81610e33565b6001546001600160a01b031633146109ff576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610a119190612aea565b11610a2f576040516324e0285f60e21b815260040160405180910390fd5b600154610900906001600160a01b0316610d8d565b6000610a4f82610e81565b92915050565b8151602014610a905760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016104c2565b6000634ff746f660e01b83604051602401610aab9190612afd565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600354600480549351633dbb202b60e01b81529294506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694633dbb202b94610b359490921692879201612b10565b600060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b606084848484604051602401610c079493929190612b4a565b60408051601f198184030181529190526020810180516001600160e01b031663cbd4ece960e01b1790529050949350505050565b6000610c4682610ead565b8015610c575750610c578383610f47565b9392505050565b815160009060208401610c7964ffffffffff851682846110d6565b95945050505050565b60008160ff16600003610c9757506000610c57565b610caa8460181c6001600160601b031690565b6001600160601b0316610cc060ff841685612b87565b1115610d2857610cd98460781c6001600160601b031690565b610cec8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016104c2565b60208260ff161115610d4d5760405163045df3f960e01b815260040160405180910390fd5b600882026000610d668660781c6001600160601b031690565b6001600160601b03169490940151600160ff1b600019929092019190911d16949350505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000610a4f7f000000000000000000000000000000000000000000000000000000000000000083611113565b805160208201516040808401519051634d69ee5760e01b81526000936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693634d69ee5793610f0693600401612b9a565b602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190612c45565b600080836007602160991b01604051602001610f64929190612c67565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f19818403018152908290528051602091820120602160f91b9183019190915291506000908190610fd89060340160408051601f19818403018152919052606087015187516111d4565b909250905060018215151461106b5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201526c37b7b310383937bb34b232b21760991b608482015260a4016104c2565b6000611076826111fd565b90506110cb8460405160200161108e91815260200190565b60408051601f1981840301815290829052600160f81b602083015290602101604051602081830303815290604052886080015184604001516112c1565b979650505050505050565b6000806110e38385612b87565b90506040518111156110f3575060005b806000036111085762ffffff19915050610c57565b610c798585856112e5565b6000336001600160a01b038416146111575760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b60448201526064016104c2565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c39190612c9e565b6001600160a01b0316149392505050565b6000606060006111e38661135c565b90506111f081868661138e565b9250925050935093915050565b60408051608081018252600080825260208201819052918101829052606081018290529061122a83611469565b9050604051806080016040528061125a8360008151811061124d5761124d612cbb565b602002602001015161149c565b81526020016112758360018151811061124d5761124d612cbb565b815260200161129d8360028151811061129057611290612cbb565b60200260200101516114a3565b81526020016112b88360038151811061129057611290612cbb565b90529392505050565b6000806112cd8661135c565b90506112db818686866115a4565b9695505050505050565b60006060601883856001600160601b0382168214801561130d575086816001600160601b0316145b6113465760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016104c2565b96831b90961790911b90941790931b9392505050565b6060818051906020012060405160200161137891815260200190565b6040516020818303038152906040529050919050565b60006060600061139d856115da565b905060008060006113af848a896116ce565b815192955090935091501580806113c35750815b61140f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104c2565b60008161142b5760405180602001604052806000815250611457565b6114578661143a600188612aea565b8151811061144a5761144a612cbb565b6020026020010151611ae4565b919b919a509098505050505050505050565b604080518082018252600080825260209182015281518083019092528251825280830190820152606090610a4f90611b0e565b6000610a4f825b600060228260000151106114f95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b600080600061150785611cfa565b91945092509050600081600181111561152257611522612cd1565b1461156f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b60008386602001516115819190612b87565b805190915060208410156112db5760208490036101000a90049695505050505050565b60008060006115b487868661138e565b915091508180156110cb57508051602080830191909120875191880191909120146110cb565b606060006115e783611469565b90506000815167ffffffffffffffff81111561160557611605612584565b60405190808252806020026020018201604052801561164a57816020015b60408051808201909152606080825260208201528152602001906001900390816116235790505b50825190915060005b818110156116c457600061167f85838151811061167257611672612cbb565b6020026020010151612048565b9050604051806040016040528082815260200161169b83611469565b8152508483815181106116b0576116b0612cbb565b602090810291909101015250600101611653565b5090949350505050565b600060608180806116de876120cf565b90506000869050600080611705604051806040016040528060608152602001606081525090565b8b5160005b81811015611abb578d818151811061172457611724612cbb565b60200260200101519250838561173a9190612b87565b9450611747600189612b87565b9750846000036117a25782518051602090910120861461179d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104c2565b611860565b825151601f10156118055782518051602090910120861461179d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104c2565b856118138460000151612204565b146118605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104c2565b60019081019061187290601090612b87565b836020015151036118e45786518514611abb57600087868151811061189957611899612cbb565b602001015160f81c60f81b60f81c9050600084602001518260ff16815181106118c4576118c4612cbb565b602002602001015190506118d78161222c565b975060019550505061170a565b600283602001515103611a735760006118fc84612262565b905060008160008151811061191357611913612cbb565b016020015160f81c9050600061192a600283612cfd565b611935906002612d1f565b90506000611946848360ff16612286565b905060006119548c8b612286565b9050600061196283836122bc565b905060ff851660021480611979575060ff85166003145b156119b35780835114801561198e5750808251145b156119a05761199d818c612b87565b9a505b50600160ff1b9a50611abb945050505050565b60ff851615806119c6575060ff85166001145b15611a1c57825181146119e65750600160ff1b9a50611abb945050505050565b611a0d8960200151600181518110611a0057611a00612cbb565b602002602001015161222c565b9b50985061170a945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104c2565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104c2565b50600160ff1b851487611ace8887612286565b909f909e50909c509a5050505050505050505050565b60208101518051606091610a4f91611afe90600190612aea565b8151811061167257611672612cbb565b6060600080611b1c84611cfa565b91935090915060019050816001811115611b3857611b38612cd1565b14611b855760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016104c2565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081611b9e5790505090506000835b8651811015611cef5760208210611c375760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104c2565b600080611c746040518060400160405280858c60000151611c589190612aea565b8152602001858c60200151611c6d9190612b87565b9052611cfa565b509150915060405180604001604052808383611c909190612b87565b8152602001848b60200151611ca59190612b87565b815250858581518110611cba57611cba612cbb565b6020908102919091010152611cd0600185612b87565b9350611cdc8183612b87565b611ce69084612b87565b92505050611bcb565b508152949350505050565b600080600080846000015111611d525760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016104c2565b6020840151805160001a6080811015611d78576000600160009450945094505050612041565b60b8811015611df5576000611d8e608083612aea565b905080876000015111611de35760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016104c2565b60019550935060009250612041915050565b60c0811015611ee5576000611e0b60b783612aea565b905080876000015111611e605760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104c2565b600183015160208290036101000a9004611e7a8183612b87565b885111611ec95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016104c2565b611ed4826001612b87565b965094506000935061204192505050565b60f8811015611f61576000611efb60c083612aea565b905080876000015111611f505760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016104c2565b600195509350849250612041915050565b6000611f6e60f783612aea565b905080876000015111611fc35760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104c2565b600183015160208290036101000a9004611fdd8183612b87565b8851116120255760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104c2565b612030826001612b87565b965094506001935061204192505050565b9193909250565b6060600080600061205885611cfa565b91945092509050600081600181111561207357612073612cd1565b146120c05760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016104c2565b610c7985602001518484612338565b60606000825160026120e19190612d38565b67ffffffffffffffff8111156120f9576120f9612584565b6040519080825280601f01601f191660200182016040528015612123576020820181803683370190505b50835190915060005b818110156121fb57600485828151811061214857612148612cbb565b01602001516001600160f81b031916901c83612165836002612d38565b8151811061217557612175612cbb565b60200101906001600160f81b031916908160001a90535060108582815181106121a0576121a0612cbb565b01602001516121b2919060f81c612cfd565b60f81b836121c1836002612d38565b6121cc906001612b87565b815181106121dc576121dc612cbb565b60200101906001600160f81b031916908160001a90535060010161212c565b50909392505050565b600060208251101561221857506020015190565b81806020019051810190610a4f9190612d4f565b6000606060208360000151101561224d576122468361240c565b9050612259565b61225683612048565b90505b610c5781612204565b6060610a4f612281836020015160008151811061167257611672612cbb565b6120cf565b6060825182106122a55750604080516020810190915260008152610a4f565b610c5783838486516122b79190612aea565b612417565b6000805b8084511180156122d05750808351115b801561232157508281815181106122e9576122e9612cbb565b602001015160f81c60f81b6001600160f81b03191684828151811061231057612310612cbb565b01602001516001600160f81b031916145b15610c57578061233081612d68565b9150506122c0565b606060008267ffffffffffffffff81111561235557612355612584565b6040519080825280601f01601f19166020018201604052801561237f576020820181803683370190505b5090508051600003612392579050610c57565b600061239e8587612b87565b90506020820160005b6123b2602087612d81565b8110156123df57825182526123c8602084612b87565b92506123d5602083612b87565b91506001016123a7565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6060610a4f8261256e565b60608161242581601f612b87565b10156124645760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b8261246f8382612b87565b10156124ae5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b6124b88284612b87565b845110156124fc5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104c2565b60608215801561251b5760405191506000825260208201604052612565565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561255457805183526020928301920161253c565b5050858452601f01601f1916604052505b50949350505050565b6060610a4f826020015160008460000151612338565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156125bd576125bd612584565b60405290565b60405160a0810167ffffffffffffffff811182821017156125bd576125bd612584565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260f5761260f612584565b604052919050565b600082601f83011261262857600080fd5b813567ffffffffffffffff81111561264257612642612584565b612655601f8201601f19166020016125e6565b81815284602083860101111561266a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561269a57600080fd5b823567ffffffffffffffff808211156126b257600080fd5b6126be86838701612617565b935060208501359150808211156126d457600080fd5b506126e185828601612617565b9150509250929050565b6000602082840312156126fd57600080fd5b813567ffffffffffffffff81111561271457600080fd5b61272084828501612617565b949350505050565b6001600160a01b03811681146105ee57600080fd5b60006020828403121561274f57600080fd5b8135610c5781612728565b600060a0828403121561276c57600080fd5b60405160a0810167ffffffffffffffff828210818311171561279057612790612584565b816040528293508435835260208501356020840152604085013560408401526060850135606084015260808501359150808211156127cd57600080fd5b506127da85828601612617565b6080830152505092915050565b6000604082840312156127f957600080fd5b61280161259a565b90508135815260208083013567ffffffffffffffff8082111561282357600080fd5b818501915085601f83011261283757600080fd5b81358181111561284957612849612584565b8060051b915061285a8483016125e6565b818152918301840191848101908884111561287457600080fd5b938501935b8385101561289257843582529385019390850190612879565b808688015250505050505092915050565b600080600080600060a086880312156128bb57600080fd5b85356128c681612728565b945060208601356128d681612728565b9350604086013567ffffffffffffffff808211156128f357600080fd5b6128ff89838a01612617565b945060608801359350608088013591508082111561291c57600080fd5b9087019060a0828a03121561293057600080fd5b6129386125c3565b8235815260208301358281111561294e57600080fd5b61295a8b82860161275a565b60208301525060408301358281111561297257600080fd5b61297e8b8286016127e7565b60408301525060608301358281111561299657600080fd5b6129a28b828601612617565b6060830152506080830135828111156129ba57600080fd5b6129c68b828601612617565b6080830152508093505050509295509295909350565b6000602082840312156129ee57600080fd5b5035919050565b60005b83811015612a105781810151838201526020016129f8565b50506000910152565b60008151808452612a318160208601602086016129f5565b601f01601f19169290920160200192915050565b606081526000612a586060830186612a19565b8281036020840152612a6a8186612a19565b91505060018060a01b0383166040830152949350505050565b604081526000612a966040830185612a19565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160601b03828116828216039080821115612ae357612ae3612aad565b5092915050565b81810381811115610a4f57610a4f612aad565b602081526000610c576020830184612a19565b6001600160a01b0384168152606060208201819052600090612b3490830185612a19565b905063ffffffff83166040830152949350505050565b6001600160a01b03858116825284166020820152608060408201819052600090612b7690830185612a19565b905082606083015295945050505050565b80820180821115610a4f57610a4f612aad565b8381526000602060608184015284516060840152808501516080840152604085015160a0840152606085015160c0840152608085015160a060e0850152612be5610100850182612a19565b905083810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b80841015612c375784518252938501936001939093019290850190612c17565b509998505050505050505050565b600060208284031215612c5757600080fd5b81518015158114610c5757600080fd5b60008351612c798184602088016129f5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600060208284031215612cb057600080fd5b8151610c5781612728565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600060ff831680612d1057612d10612ce7565b8060ff84160691505092915050565b60ff8281168282160390811115610a4f57610a4f612aad565b8082028115828204841417610a4f57610a4f612aad565b600060208284031215612d6157600080fd5b5051919050565b600060018201612d7a57612d7a612aad565b5060010190565b600082612d9057612d90612ce7565b50049056fea264697066735822122049488d98f454e5e1097bffbc409bd2ed7b797216444b82845a44d82d3af4fe4b64736f6c63430008110033",
  "deployedBytecode": "0x60806040526004361061012e5760003560e01c8063715018a6116100ab578063c5b350df1161006f578063c5b350df14610399578063cc394283146103ae578063d1851c92146103ce578063d232c220146103ec578063d69f9d611461040b578063db1b76591461043f57600080fd5b8063715018a6146102e65780637850b020146102fb5780638da5cb5b1461031b578063b1f8100d14610339578063c1f0808a1461035957600080fd5b806352a9674b116100f257806352a9674b146102285780635bd11efc1461025c5780635f61e3ec1461027c5780636a42b8f8146102b05780636e2edb4e146102c657600080fd5b80630f329ef81461013a578063141684161461018b5780633cf52ffb146101d457806348e6fa23146101f35780634ff746f61461020857600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019757600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610182565b3480156101e057600080fd5b506002545b604051908152602001610182565b610206610201366004612687565b61045f565b005b34801561021457600080fd5b506102066102233660046126eb565b610514565b34801561023457600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026857600080fd5b5061020661027736600461273d565b6105ba565b34801561028857600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102bc57600080fd5b5062093a806101e5565b3480156102d257600080fd5b506102066102e13660046128a3565b6105f1565b3480156102f257600080fd5b5061020661084e565b34801561030757600080fd5b506102066103163660046129dc565b610902565b34801561032757600080fd5b506000546001600160a01b031661016e565b34801561034557600080fd5b5061020661035436600461273d565b610936565b34801561036557600080fd5b506103896103743660046129dc565b60056020526000908152604090205460ff1681565b6040519015158152602001610182565b3480156103a557600080fd5b506102066109d4565b3480156103ba57600080fd5b5060035461016e906001600160a01b031681565b3480156103da57600080fd5b506001546001600160a01b031661016e565b3480156103f857600080fd5b506000546001600160a01b031615610389565b34801561041757600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044b57600080fd5b5061038961045a36600461273d565b610a44565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104cb5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6104d58282610a55565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161050893929190612a45565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105755760405162461bcd60e51b81526004016104c29060208082526004908201526310a0a6a160e11b604082015260600190565b61057e81610b6c565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105af929190612a83565b60405180910390a150565b6000546001600160a01b031633146105e5576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610b85565b50565b6003546001600160a01b038581169116146106415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016104c2565b6001600160a01b03851630146106815760405162461bcd60e51b8152602060048201526005602482015264217468697360d81b60448201526064016104c2565b600061068f86868686610bee565b905061069b8183610c3b565b6106d05760405162461bcd60e51b815260206004820152600660248201526510b83937b7b360d11b60448201526064016104c2565b60006106dc8582610c5e565b905060006107136106fb6020601885901c6001600160601b0316612ac3565b62ffffff198416906001600160601b03166020610c82565b60008181526005602052604090205490915060ff166108445760008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166004820152602481018290526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e7d93fa90604401600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8160405160200161081f91815260200190565b60408051601f198184030181529082905261083b913390612a83565b60405180910390a15b5050505050505050565b6000546001600160a01b03163314610879576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261088b9190612aea565b116108a9576040516324e0285f60e21b815260040160405180910390fd5b6002546000036108cc57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156108f6576040516323295ef960e01b815260040160405180910390fd5b6109006000610d8d565b565b6000546001600160a01b0316331461092d576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610df2565b6000546001600160a01b03163314610961576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561097f575060025415155b1561099d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036109cb57604051634a2fb73f60e11b815260040160405180910390fd5b6105ee81610e33565b6001546001600160a01b031633146109ff576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610a119190612aea565b11610a2f576040516324e0285f60e21b815260040160405180910390fd5b600154610900906001600160a01b0316610d8d565b6000610a4f82610e81565b92915050565b8151602014610a905760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016104c2565b6000634ff746f660e01b83604051602401610aab9190612afd565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600354600480549351633dbb202b60e01b81529294506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694633dbb202b94610b359490921692879201612b10565b600060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b606084848484604051602401610c079493929190612b4a565b60408051601f198184030181529190526020810180516001600160e01b031663cbd4ece960e01b1790529050949350505050565b6000610c4682610ead565b8015610c575750610c578383610f47565b9392505050565b815160009060208401610c7964ffffffffff851682846110d6565b95945050505050565b60008160ff16600003610c9757506000610c57565b610caa8460181c6001600160601b031690565b6001600160601b0316610cc060ff841685612b87565b1115610d2857610cd98460781c6001600160601b031690565b610cec8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016104c2565b60208260ff161115610d4d5760405163045df3f960e01b815260040160405180910390fd5b600882026000610d668660781c6001600160601b031690565b6001600160601b03169490940151600160ff1b600019929092019190911d16949350505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000610a4f7f000000000000000000000000000000000000000000000000000000000000000083611113565b805160208201516040808401519051634d69ee5760e01b81526000936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693634d69ee5793610f0693600401612b9a565b602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190612c45565b600080836007602160991b01604051602001610f64929190612c67565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f19818403018152908290528051602091820120602160f91b9183019190915291506000908190610fd89060340160408051601f19818403018152919052606087015187516111d4565b909250905060018215151461106b5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201526c37b7b310383937bb34b232b21760991b608482015260a4016104c2565b6000611076826111fd565b90506110cb8460405160200161108e91815260200190565b60408051601f1981840301815290829052600160f81b602083015290602101604051602081830303815290604052886080015184604001516112c1565b979650505050505050565b6000806110e38385612b87565b90506040518111156110f3575060005b806000036111085762ffffff19915050610c57565b610c798585856112e5565b6000336001600160a01b038416146111575760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b60448201526064016104c2565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c39190612c9e565b6001600160a01b0316149392505050565b6000606060006111e38661135c565b90506111f081868661138e565b9250925050935093915050565b60408051608081018252600080825260208201819052918101829052606081018290529061122a83611469565b9050604051806080016040528061125a8360008151811061124d5761124d612cbb565b602002602001015161149c565b81526020016112758360018151811061124d5761124d612cbb565b815260200161129d8360028151811061129057611290612cbb565b60200260200101516114a3565b81526020016112b88360038151811061129057611290612cbb565b90529392505050565b6000806112cd8661135c565b90506112db818686866115a4565b9695505050505050565b60006060601883856001600160601b0382168214801561130d575086816001600160601b0316145b6113465760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016104c2565b96831b90961790911b90941790931b9392505050565b6060818051906020012060405160200161137891815260200190565b6040516020818303038152906040529050919050565b60006060600061139d856115da565b905060008060006113af848a896116ce565b815192955090935091501580806113c35750815b61140f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104c2565b60008161142b5760405180602001604052806000815250611457565b6114578661143a600188612aea565b8151811061144a5761144a612cbb565b6020026020010151611ae4565b919b919a509098505050505050505050565b604080518082018252600080825260209182015281518083019092528251825280830190820152606090610a4f90611b0e565b6000610a4f825b600060228260000151106114f95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b600080600061150785611cfa565b91945092509050600081600181111561152257611522612cd1565b1461156f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b60008386602001516115819190612b87565b805190915060208410156112db5760208490036101000a90049695505050505050565b60008060006115b487868661138e565b915091508180156110cb57508051602080830191909120875191880191909120146110cb565b606060006115e783611469565b90506000815167ffffffffffffffff81111561160557611605612584565b60405190808252806020026020018201604052801561164a57816020015b60408051808201909152606080825260208201528152602001906001900390816116235790505b50825190915060005b818110156116c457600061167f85838151811061167257611672612cbb565b6020026020010151612048565b9050604051806040016040528082815260200161169b83611469565b8152508483815181106116b0576116b0612cbb565b602090810291909101015250600101611653565b5090949350505050565b600060608180806116de876120cf565b90506000869050600080611705604051806040016040528060608152602001606081525090565b8b5160005b81811015611abb578d818151811061172457611724612cbb565b60200260200101519250838561173a9190612b87565b9450611747600189612b87565b9750846000036117a25782518051602090910120861461179d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104c2565b611860565b825151601f10156118055782518051602090910120861461179d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104c2565b856118138460000151612204565b146118605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104c2565b60019081019061187290601090612b87565b836020015151036118e45786518514611abb57600087868151811061189957611899612cbb565b602001015160f81c60f81b60f81c9050600084602001518260ff16815181106118c4576118c4612cbb565b602002602001015190506118d78161222c565b975060019550505061170a565b600283602001515103611a735760006118fc84612262565b905060008160008151811061191357611913612cbb565b016020015160f81c9050600061192a600283612cfd565b611935906002612d1f565b90506000611946848360ff16612286565b905060006119548c8b612286565b9050600061196283836122bc565b905060ff851660021480611979575060ff85166003145b156119b35780835114801561198e5750808251145b156119a05761199d818c612b87565b9a505b50600160ff1b9a50611abb945050505050565b60ff851615806119c6575060ff85166001145b15611a1c57825181146119e65750600160ff1b9a50611abb945050505050565b611a0d8960200151600181518110611a0057611a00612cbb565b602002602001015161222c565b9b50985061170a945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104c2565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104c2565b50600160ff1b851487611ace8887612286565b909f909e50909c509a5050505050505050505050565b60208101518051606091610a4f91611afe90600190612aea565b8151811061167257611672612cbb565b6060600080611b1c84611cfa565b91935090915060019050816001811115611b3857611b38612cd1565b14611b855760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016104c2565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081611b9e5790505090506000835b8651811015611cef5760208210611c375760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104c2565b600080611c746040518060400160405280858c60000151611c589190612aea565b8152602001858c60200151611c6d9190612b87565b9052611cfa565b509150915060405180604001604052808383611c909190612b87565b8152602001848b60200151611ca59190612b87565b815250858581518110611cba57611cba612cbb565b6020908102919091010152611cd0600185612b87565b9350611cdc8183612b87565b611ce69084612b87565b92505050611bcb565b508152949350505050565b600080600080846000015111611d525760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016104c2565b6020840151805160001a6080811015611d78576000600160009450945094505050612041565b60b8811015611df5576000611d8e608083612aea565b905080876000015111611de35760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016104c2565b60019550935060009250612041915050565b60c0811015611ee5576000611e0b60b783612aea565b905080876000015111611e605760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104c2565b600183015160208290036101000a9004611e7a8183612b87565b885111611ec95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016104c2565b611ed4826001612b87565b965094506000935061204192505050565b60f8811015611f61576000611efb60c083612aea565b905080876000015111611f505760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016104c2565b600195509350849250612041915050565b6000611f6e60f783612aea565b905080876000015111611fc35760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104c2565b600183015160208290036101000a9004611fdd8183612b87565b8851116120255760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104c2565b612030826001612b87565b965094506001935061204192505050565b9193909250565b6060600080600061205885611cfa565b91945092509050600081600181111561207357612073612cd1565b146120c05760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016104c2565b610c7985602001518484612338565b60606000825160026120e19190612d38565b67ffffffffffffffff8111156120f9576120f9612584565b6040519080825280601f01601f191660200182016040528015612123576020820181803683370190505b50835190915060005b818110156121fb57600485828151811061214857612148612cbb565b01602001516001600160f81b031916901c83612165836002612d38565b8151811061217557612175612cbb565b60200101906001600160f81b031916908160001a90535060108582815181106121a0576121a0612cbb565b01602001516121b2919060f81c612cfd565b60f81b836121c1836002612d38565b6121cc906001612b87565b815181106121dc576121dc612cbb565b60200101906001600160f81b031916908160001a90535060010161212c565b50909392505050565b600060208251101561221857506020015190565b81806020019051810190610a4f9190612d4f565b6000606060208360000151101561224d576122468361240c565b9050612259565b61225683612048565b90505b610c5781612204565b6060610a4f612281836020015160008151811061167257611672612cbb565b6120cf565b6060825182106122a55750604080516020810190915260008152610a4f565b610c5783838486516122b79190612aea565b612417565b6000805b8084511180156122d05750808351115b801561232157508281815181106122e9576122e9612cbb565b602001015160f81c60f81b6001600160f81b03191684828151811061231057612310612cbb565b01602001516001600160f81b031916145b15610c57578061233081612d68565b9150506122c0565b606060008267ffffffffffffffff81111561235557612355612584565b6040519080825280601f01601f19166020018201604052801561237f576020820181803683370190505b5090508051600003612392579050610c57565b600061239e8587612b87565b90506020820160005b6123b2602087612d81565b8110156123df57825182526123c8602084612b87565b92506123d5602083612b87565b91506001016123a7565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6060610a4f8261256e565b60608161242581601f612b87565b10156124645760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b8261246f8382612b87565b10156124ae5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b6124b88284612b87565b845110156124fc5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104c2565b60608215801561251b5760405191506000825260208201604052612565565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561255457805183526020928301920161253c565b5050858452601f01601f1916604052505b50949350505050565b6060610a4f826020015160008460000151612338565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156125bd576125bd612584565b60405290565b60405160a0810167ffffffffffffffff811182821017156125bd576125bd612584565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260f5761260f612584565b604052919050565b600082601f83011261262857600080fd5b813567ffffffffffffffff81111561264257612642612584565b612655601f8201601f19166020016125e6565b81815284602083860101111561266a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561269a57600080fd5b823567ffffffffffffffff808211156126b257600080fd5b6126be86838701612617565b935060208501359150808211156126d457600080fd5b506126e185828601612617565b9150509250929050565b6000602082840312156126fd57600080fd5b813567ffffffffffffffff81111561271457600080fd5b61272084828501612617565b949350505050565b6001600160a01b03811681146105ee57600080fd5b60006020828403121561274f57600080fd5b8135610c5781612728565b600060a0828403121561276c57600080fd5b60405160a0810167ffffffffffffffff828210818311171561279057612790612584565b816040528293508435835260208501356020840152604085013560408401526060850135606084015260808501359150808211156127cd57600080fd5b506127da85828601612617565b6080830152505092915050565b6000604082840312156127f957600080fd5b61280161259a565b90508135815260208083013567ffffffffffffffff8082111561282357600080fd5b818501915085601f83011261283757600080fd5b81358181111561284957612849612584565b8060051b915061285a8483016125e6565b818152918301840191848101908884111561287457600080fd5b938501935b8385101561289257843582529385019390850190612879565b808688015250505050505092915050565b600080600080600060a086880312156128bb57600080fd5b85356128c681612728565b945060208601356128d681612728565b9350604086013567ffffffffffffffff808211156128f357600080fd5b6128ff89838a01612617565b945060608801359350608088013591508082111561291c57600080fd5b9087019060a0828a03121561293057600080fd5b6129386125c3565b8235815260208301358281111561294e57600080fd5b61295a8b82860161275a565b60208301525060408301358281111561297257600080fd5b61297e8b8286016127e7565b60408301525060608301358281111561299657600080fd5b6129a28b828601612617565b6060830152506080830135828111156129ba57600080fd5b6129c68b828601612617565b6080830152508093505050509295509295909350565b6000602082840312156129ee57600080fd5b5035919050565b60005b83811015612a105781810151838201526020016129f8565b50506000910152565b60008151808452612a318160208601602086016129f5565b601f01601f19169290920160200192915050565b606081526000612a586060830186612a19565b8281036020840152612a6a8186612a19565b91505060018060a01b0383166040830152949350505050565b604081526000612a966040830185612a19565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160601b03828116828216039080821115612ae357612ae3612aad565b5092915050565b81810381811115610a4f57610a4f612aad565b602081526000610c576020830184612a19565b6001600160a01b0384168152606060208201819052600090612b3490830185612a19565b905063ffffffff83166040830152949350505050565b6001600160a01b03858116825284166020820152608060408201819052600090612b7690830185612a19565b905082606083015295945050505050565b80820180821115610a4f57610a4f612aad565b8381526000602060608184015284516060840152808501516080840152604085015160a0840152606085015160c0840152608085015160a060e0850152612be5610100850182612a19565b905083810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b80841015612c375784518252938501936001939093019290850190612c17565b509998505050505050505050565b600060208284031215612c5757600080fd5b81518015158114610c5757600080fd5b60008351612c798184602088016129f5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600060208284031215612cb057600080fd5b8151610c5781612728565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600060ff831680612d1057612d10612ce7565b8060ff84160691505092915050565b60ff8281168282160390811115610a4f57610a4f612aad565b8082028115828204841417610a4f57610a4f612aad565b600060208284031215612d6157600080fd5b5051919050565b600060018201612d7a57612d7a612aad565b5060010190565b600082612d9057612d90612ce7565b50049056fea264697066735822122049488d98f454e5e1097bffbc409bd2ed7b797216444b82845a44d82d3af4fe4b64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
