{
  "_format": "hh-sol-artifact-1",
  "contractName": "PromiseRouter",
  "sourceName": "@connext/nxtp-contracts/contracts/core/promise/PromiseRouter.sol",
  "abi": [
    {
      "inputs": [],
      "name": "PromiseRouter__bumpCallbackFee_messageUnavailable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__bumpCallbackFee_valueIsZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__initCallbackFee_valueIsZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__onlyConnext_notConnext",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__process_insufficientCallbackFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__process_invalidMessage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__process_invalidTransferId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__process_notApprovedRelayer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__process_notContractCallback",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__send_callbackAddressNotContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PromiseRouter__send_returndataEmpty",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__acceptProposedOwner_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyOwner_notOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__onlyProposed_notProposedOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_delayNotElapsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_invalidProposal",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProposedOwnable__renounceOwnership_noProposal",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "CallbackExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "transferId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "addedFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "CallbackFeeAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "originAndNonce",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "origin",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "transferId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "callbackAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "remote",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "transferId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "callbackAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Send",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connext",
          "type": "address"
        }
      ],
      "name": "SetConnext",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptProposedOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferId",
          "type": "bytes32"
        }
      ],
      "name": "bumpCallbackFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "callbackFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connext",
      "outputs": [
        {
          "internalType": "contract IConnextHandler",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_router",
          "type": "bytes32"
        }
      ],
      "name": "enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "handle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_transferId",
          "type": "bytes32"
        }
      ],
      "name": "initCallbackFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "messageHashes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "transferId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "process",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "remotes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_transferId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_callbackAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_returnSuccess",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_returnData",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_connext",
          "type": "address"
        }
      ],
      "name": "setConnext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xAppConnectionManager",
      "outputs": [
        {
          "internalType": "contract XAppConnectionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061427b806100206000396000f3fe6080604052600436106101445760003560e01c80638da5cb5b116100b6578063d1851c921161006f578063d1851c921461041c578063d232c22014610447578063de4b054814610472578063dfefb7d71461049d578063fc89d377146104c6578063ffa1ad74146104e25761014b565b80638da5cb5b14610336578063ab2dc3f514610361578063b1f8100d1461038a578063b49c53a7146103b3578063c4d66de8146103dc578063c5b350df146104055761014b565b80635540f1c0116101085780635540f1c01461023557806365d82b8b146102515780636a42b8f81461027a5780637080f771146102a5578063715018a6146102e257806383bbb806146102f95761014b565b80633339df96146101505780633cf52ffb1461017b57806341bdc8b5146101a65780634d6f2013146101cf5780634fa6b634146101f85761014b565b3661014b57005b600080fd5b34801561015c57600080fd5b5061016561050d565b6040516101729190612c19565b60405180910390f35b34801561018757600080fd5b50610190610533565b60405161019d9190612c4d565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c89190612cba565b61053d565b005b3480156101db57600080fd5b506101f660048036038101906101f19190612cba565b610608565b005b34801561020457600080fd5b5061021f600480360381019061021a9190612d1d565b610716565b60405161022c9190612c4d565b60405180910390f35b61024f600480360381019061024a9190612d1d565b61072e565b005b34801561025d57600080fd5b5061027860048036038101906102739190612e23565b61086c565b005b34801561028657600080fd5b5061028f610b04565b60405161029c9190612c4d565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612d1d565b610b0f565b6040516102d99190612ecc565b60405180910390f35b3480156102ee57600080fd5b506102f7610b27565b005b34801561030557600080fd5b50610320600480360381019061031b9190612ee7565b610ce9565b60405161032d9190612ecc565b60405180910390f35b34801561034257600080fd5b5061034b610d01565b6040516103589190612f23565b60405180910390f35b34801561036d57600080fd5b506103886004803603810190610383919061307f565b610d2a565b005b34801561039657600080fd5b506103b160048036038101906103ac9190612cba565b610ebc565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190613102565b611098565b005b3480156103e857600080fd5b5061040360048036038101906103fe9190612cba565b611147565b005b34801561041157600080fd5b5061041a6111dd565b005b34801561042857600080fd5b506104316112da565b60405161043e9190612f23565b60405180910390f35b34801561045357600080fd5b5061045c611304565b6040516104699190613151565b60405180910390f35b34801561047e57600080fd5b5061048761135c565b604051610494919061318d565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906131a8565b611382565b005b6104e060048036038101906104db9190612d1d565b61172a565b005b3480156104ee57600080fd5b506104f7611831565b6040516105049190613224565b60405180910390f35b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105c4576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461068f576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8ff00ea0f06ea523b8f4b80a53bb86b4967c9909b4e354b47a83371249ad57f360405160405180910390a250565b60cc6020528060005260406000206000915090505481565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b5576040517f2c4b07cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003414156107f0576040517fff4355d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3460cc60008381526020019081526020016000206000828254610813919061326e565b92505081905550807fe01346f7c5b12b318c8239d37465281e572012b3f898085a3d2ed142ba2fa15d3460cc60008581526020019081526020016000205433604051610861939291906132c4565b60405180910390a250565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f3576040517f2c4b07cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828290501415610931576040517f49f88d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610998576040517f91ca0fb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109a387611836565b905060006109b487878787876118a5565b9050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a479190613339565b73ffffffffffffffffffffffffffffffffffffffff1663fa31de018984846040518463ffffffff1660e01b8152600401610a83939291906133fd565b600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050507fa1d84c22c68d469068eaf6be2c49fd6f9120f7e4176ba1dc8027e5e1cdce1f918883898989898988604051610af2989796959493929190613468565b60405180910390a15050505050505050565b600062093a80905090565b60cb6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bae576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002541415610beb576040517f392cc0fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8060025442610bfd91906134e7565b11610c34576040517f86d4b3f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f23295ef900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ce7600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611901565b565b60666020528060005260406000206000915090505481565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d3333611a10565b610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613578565b60405180910390fd5b8382610d7e8282611ab5565b610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906135e4565b60405180910390fd5b6000610de1610dd6600086611ae190919063ffffffff16565b62ffffff1916611b0c565b90506000610df48262ffffff1916611b2c565b90506000610e078362ffffff1916611b83565b90506000610e1a8462ffffff1916611bd7565b90506000610e2d8562ffffff1916611c31565b9050610e3e8562ffffff1916611ca6565b60cb6000868152602001908152602001600020819055508a63ffffffff16610e668c8c611ce9565b67ffffffffffffffff167f878c51ec082a65de8c0a9e68ec34c48c86f4d76ae6d693587eb4420611ae0f51868686868e604051610ea7959493929190613604565b60405180910390a35050505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f43576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610fcd5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611004576040517f23780cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561108c576040517f945f6e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61109581611d10565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111f576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606660008463ffffffff1663ffffffff168152602001908152602001600020819055505050565b60006111536001611dc0565b90508015611177576001600060016101000a81548160ff0219169083151502179055505b61118082611eb0565b80156111d95760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516111d091906136a0565b60405180910390a15b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f234fe4e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a806002544261127691906134e7565b116112ad576040517fd39c12bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d8600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611901565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260985414156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613707565b60405180910390fd5b6002609881905550600060cb60008581526020019081526020016000205490506000801b811415611425576040517f3099ed6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061148d611482600086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611ae190919063ffffffff16565b62ffffff1916611b0c565b905061149e8162ffffff1916611ca6565b82146114d6576040517f1048e03a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cba8b6a336040518263ffffffff1660e01b81526004016115319190612f23565b602060405180830381865afa15801561154e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611572919061373c565b6115a8576040517fbe95c75000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115b98262ffffff1916611b83565b90506115c481611f86565b6115fa576040517fe94778c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060cc600088815260200190815260200160002054905060cb600088815260200190815260200160002060009055600060cc6000898152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663034baf0e8861166e8662ffffff1916611bd7565b61167d8762ffffff1916611c31565b6040518463ffffffff1660e01b815260040161169b93929190613769565b600060405180830381600087803b1580156116b557600080fd5b505af11580156116c9573d6000803e3d6000fd5b50505050867f25639428fb03bb25e9ccc77977e8f4ed022248bae7422d898c57f328d21ad75d336040516116fd9190612f23565b60405180910390a26000811115611719576117183382611fa9565b5b505050506001609881905550505050565b6000341415611765576040517ffc7f537c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000801b60cb60008381526020019081526020016000205414156117b5576040517f53b0f6d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3460cc600083815260200190815260200160002060008282546117d8919061326e565b92505081905550807fe01346f7c5b12b318c8239d37465281e572012b3f898085a3d2ed142ba2fa15d3460cc60008581526020019081526020016000205433604051611826939291906132c4565b60405180910390a250565b600081565b6000606660008363ffffffff1663ffffffff1681526020019081526020016000205490506000801b8114156118a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611897906137f3565b60405180910390fd5b919050565b60606001808111156118ba576118b9613813565b5b8686866118c85760006118cb565b60015b8686905087876040516020016118e79796959493929190613932565b604051602081830303815290604052905095945050505050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002819055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635190bc53836040518263ffffffff1660e01b8152600401611a6d9190612f23565b602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae919061373c565b9050919050565b600081606660008563ffffffff1663ffffffff1681526020019081526020016000205414905092915050565b600080835190506000602085019050611b028464ffffffffff16828461209d565b9250505092915050565b6000611b25611b1a83612105565b62ffffff1916612157565b9050919050565b6000816001611b5c816001811115611b4757611b46613813565b5b8362ffffff19166121a990919063ffffffff16565b50611b7a600160208662ffffff19166122579092919063ffffffff16565b92505050919050565b6000816001611bb3816001811115611b9e57611b9d613813565b5b8362ffffff19166121a990919063ffffffff16565b50611bce60218562ffffff191661239c90919063ffffffff16565b92505050919050565b6000816001611c07816001811115611bf257611bf1613813565b5b8362ffffff19166121a990919063ffffffff16565b506001611c27603560018762ffffff19166123b29092919063ffffffff16565b1492505050919050565b6060816001611c61816001811115611c4c57611c4b613813565b5b8362ffffff19166121a990919063ffffffff16565b506000611c6d856123e9565b9050611c9c611c9160568360008962ffffff191661240f909392919063ffffffff16565b62ffffff19166124a6565b9350505050919050565b600080611cb2836124ed565b6bffffffffffffffffffffffff1690506000611ccd8461250d565b6bffffffffffffffffffffffff16905080822092505050919050565b60008163ffffffff1660208463ffffffff1667ffffffffffffffff16901b17905092915050565b4260028190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a60405160405180910390a250565b60008060019054906101000a900460ff1615611e375760018260ff16148015611def5750611ded30611f86565b155b611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613a12565b60405180910390fd5b60009050611eab565b8160ff1660008054906101000a900460ff1660ff1610611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390613a12565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b6000611ebc6001611dc0565b90508015611ee0576001600060016101000a81548160ff0219169083151502179055505b81603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f2961252d565b8015611f825760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611f7991906136a0565b60405180910390a15b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b80471015611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390613a7e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161201290613ac4565b60006040518083038185875af1925050503d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b5050905080612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90613b4b565b60405180910390fd5b505050565b60008082846120ac919061326e565b90506040518111156120bd57600090505b60008114156120ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506120fe565b6120fa858585612586565b9150505b9392505050565b6000612110826125a7565b156121475761214060018081111561212b5761212a613813565b5b8362ffffff191661260690919063ffffffff16565b9050612152565b61214f612621565b90505b919050565b600061216282612649565b6121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890613bb7565b60405180910390fd5b819050919050565b60006121b5838361268c565b61224e5760006121d36121c7856126af565b64ffffffffff166126bc565b91505060006121e88464ffffffffff166126bc565b91505060008282604051602001612200929190613cc6565b6040516020818303038152906040529050806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459190613d4c565b60405180910390fd5b82905092915050565b6000808260ff16141561226f576000801b9050612395565b6122788461250d565b6bffffffffffffffffffffffff168260ff1684612295919061326e565b1115612312576122d66122a7856124ed565b6bffffffffffffffffffffffff166122be8661250d565b6bffffffffffffffffffffffff16858560ff1661277a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123099190613d4c565b60405180910390fd5b60208260ff161115612359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235090613de0565b60405180910390fd5b6000600883029050600061236c866124ed565b6bffffffffffffffffffffffff1690506000612387836127e8565b905080868301511693505050505b9392505050565b60006123aa838360146123b2565b905092915050565b600060088260206123c39190613e00565b6123cd9190613e34565b60ff166123db858585612257565b60001c901c90509392505050565b6000612408603660208462ffffff19166123b29092919063ffffffff16565b9050919050565b60008061241b866124ed565b6bffffffffffffffffffffffff16905061243486612817565b848683612441919061326e565b61244b919061326e565b111561247a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061249e565b8481612486919061326e565b905061249a8364ffffffffff16828661209d565b9150505b949350505050565b60606000806124b48461250d565b6bffffffffffffffffffffffff16905060405191508192506124d98460208401612841565b506020818301016040528082525050919050565b6000806bffffffffffffffffffffffff9050808360781c16915050919050565b6000806bffffffffffffffffffffffff9050808360181c16915050919050565b600060019054906101000a900460ff1661257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390613ee1565b60405180910390fd5b61258461294c565b565b600083811760601b905082811760601b905081811760181b90509392505050565b6000806125b98362ffffff191661250d565b6bffffffffffffffffffffffff16905060006125d4846123e9565b90506056821180156125e65750600081115b80156125fd5750818160566125fb919061326e565b145b92505050919050565b60008260281b60281c811790508160d81b8117905092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000905090565b600064ffffffffff61265a836126af565b64ffffffffff1614156126705760009050612687565b600061267b83612817565b90506040518111199150505b919050565b60008164ffffffffff1661269f846126af565b64ffffffffff1614905092915050565b60008160d81c9050919050565b6000806000601f90505b600f8160ff1611156127195760006008826126e19190613e34565b60ff1685901c90506126f2816129a6565b61ffff168417935060108260ff161461270d57601084901b93505b600182039150506126c6565b506000600f90505b60ff8160ff16101561277457600060088261273c9190613e34565b60ff1685901c905061274d816129a6565b61ffff168317925060008260ff161461276857601083901b92505b60018203915050612721565b50915091565b60606000612787866126bc565b9150506000612795866126bc565b91505060006127a3866126bc565b91505060006127b1866126bc565b915050838383836040516020016127cb94939291906140c5565b604051602081830303815290604052945050505050949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000600183031d9050919050565b60006128228261250d565b61282b836124ed565b016bffffffffffffffffffffffff169050919050565b600061284c836129df565b61288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612882906141bc565b60405180910390fd5b61289483612649565b6128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca9061424e565b60405180910390fd5b60006128de8461250d565b6bffffffffffffffffffffffff16905060006128f9856124ed565b6bffffffffffffffffffffffff169050600060405190508481111561291e5760206060fd5b8285848460045afa50612941612933876126af565b64ffffffffff168685612586565b935050505092915050565b600060019054906101000a900460ff1661299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299290613ee1565b60405180910390fd5b6129a433611901565b565b60006129b860048360ff16901c6129f2565b60ff168117905060088161ffff16901b90506129d3826129f2565b60ff1681179050919050565b60006129ea82612b62565b159050919050565b60008060f08317905060f08160ff161415612a11576030915050612b5d565b60f18160ff161415612a27576031915050612b5d565b60f28160ff161415612a3d576032915050612b5d565b60f38160ff161415612a53576033915050612b5d565b60f48160ff161415612a69576034915050612b5d565b60f58160ff161415612a7f576035915050612b5d565b60f68160ff161415612a95576036915050612b5d565b60f78160ff161415612aab576037915050612b5d565b60f88160ff161415612ac1576038915050612b5d565b60f98160ff161415612ad7576039915050612b5d565b60fa8160ff161415612aed576061915050612b5d565b60fb8160ff161415612b03576062915050612b5d565b60fc8160ff161415612b19576063915050612b5d565b60fd8160ff161415612b2f576064915050612b5d565b60fe8160ff161415612b45576065915050612b5d565b60ff8160ff161415612b5b576066915050612b5d565b505b919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000062ffffff19168262ffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612bdf612bda612bd584612b9a565b612bba565b612b9a565b9050919050565b6000612bf182612bc4565b9050919050565b6000612c0382612be6565b9050919050565b612c1381612bf8565b82525050565b6000602082019050612c2e6000830184612c0a565b92915050565b6000819050919050565b612c4781612c34565b82525050565b6000602082019050612c626000830184612c3e565b92915050565b6000604051905090565b600080fd5b600080fd5b6000612c8782612b9a565b9050919050565b612c9781612c7c565b8114612ca257600080fd5b50565b600081359050612cb481612c8e565b92915050565b600060208284031215612cd057612ccf612c72565b5b6000612cde84828501612ca5565b91505092915050565b6000819050919050565b612cfa81612ce7565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612c72565b5b6000612d4184828501612d08565b91505092915050565b600063ffffffff82169050919050565b612d6381612d4a565b8114612d6e57600080fd5b50565b600081359050612d8081612d5a565b92915050565b60008115159050919050565b612d9b81612d86565b8114612da657600080fd5b50565b600081359050612db881612d92565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612de357612de2612dbe565b5b8235905067ffffffffffffffff811115612e0057612dff612dc3565b5b602083019150836001820283011115612e1c57612e1b612dc8565b5b9250929050565b60008060008060008060a08789031215612e4057612e3f612c72565b5b6000612e4e89828a01612d71565b9650506020612e5f89828a01612d08565b9550506040612e7089828a01612ca5565b9450506060612e8189828a01612da9565b935050608087013567ffffffffffffffff811115612ea257612ea1612c77565b5b612eae89828a01612dcd565b92509250509295509295509295565b612ec681612ce7565b82525050565b6000602082019050612ee16000830184612ebd565b92915050565b600060208284031215612efd57612efc612c72565b5b6000612f0b84828501612d71565b91505092915050565b612f1d81612c7c565b82525050565b6000602082019050612f386000830184612f14565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f8c82612f43565b810181811067ffffffffffffffff82111715612fab57612faa612f54565b5b80604052505050565b6000612fbe612c68565b9050612fca8282612f83565b919050565b600067ffffffffffffffff821115612fea57612fe9612f54565b5b612ff382612f43565b9050602081019050919050565b82818337600083830152505050565b600061302261301d84612fcf565b612fb4565b90508281526020810184848401111561303e5761303d612f3e565b5b613049848285613000565b509392505050565b600082601f83011261306657613065612dbe565b5b813561307684826020860161300f565b91505092915050565b6000806000806080858703121561309957613098612c72565b5b60006130a787828801612d71565b94505060206130b887828801612d71565b93505060406130c987828801612d08565b925050606085013567ffffffffffffffff8111156130ea576130e9612c77565b5b6130f687828801613051565b91505092959194509250565b6000806040838503121561311957613118612c72565b5b600061312785828601612d71565b925050602061313885828601612d08565b9150509250929050565b61314b81612d86565b82525050565b60006020820190506131666000830184613142565b92915050565b600061317782612be6565b9050919050565b6131878161316c565b82525050565b60006020820190506131a2600083018461317e565b92915050565b6000806000604084860312156131c1576131c0612c72565b5b60006131cf86828701612d08565b935050602084013567ffffffffffffffff8111156131f0576131ef612c77565b5b6131fc86828701612dcd565b92509250509250925092565b600060ff82169050919050565b61321e81613208565b82525050565b60006020820190506132396000830184613215565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061327982612c34565b915061328483612c34565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132b9576132b861323f565b5b828201905092915050565b60006060820190506132d96000830186612c3e565b6132e66020830185612c3e565b6132f36040830184612f14565b949350505050565b600061330682612c7c565b9050919050565b613316816132fb565b811461332157600080fd5b50565b6000815190506133338161330d565b92915050565b60006020828403121561334f5761334e612c72565b5b600061335d84828501613324565b91505092915050565b61336f81612d4a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133af578082015181840152602081019050613394565b838111156133be576000848401525b50505050565b60006133cf82613375565b6133d98185613380565b93506133e9818560208601613391565b6133f281612f43565b840191505092915050565b60006060820190506134126000830186613366565b61341f6020830185612ebd565b818103604083015261343181846133c4565b9050949350505050565b60006134478385613380565b9350613454838584613000565b61345d83612f43565b840190509392505050565b600060e08201905061347d600083018b613366565b61348a602083018a612ebd565b6134976040830189612ebd565b6134a46060830188612f14565b6134b16080830187613142565b81810360a08301526134c481858761343b565b905081810360c08301526134d881846133c4565b90509998505050505050505050565b60006134f282612c34565b91506134fd83612c34565b9250828210156135105761350f61323f565b5b828203905092915050565b600082825260208201905092915050565b7f217265706c696361000000000000000000000000000000000000000000000000600082015250565b600061356260088361351b565b915061356d8261352c565b602082019050919050565b6000602082019050818103600083015261359181613555565b9050919050565b7f2172656d6f746520726f75746572000000000000000000000000000000000000600082015250565b60006135ce600e8361351b565b91506135d982613598565b602082019050919050565b600060208201905081810360008301526135fd816135c1565b9050919050565b600060a0820190506136196000830188612ebd565b6136266020830187612f14565b6136336040830186613142565b818103606083015261364581856133c4565b9050818103608083015261365981846133c4565b90509695505050505050565b6000819050919050565b600061368a61368561368084613665565b612bba565b613208565b9050919050565b61369a8161366f565b82525050565b60006020820190506136b56000830184613691565b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136f1601f8361351b565b91506136fc826136bb565b602082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b60008151905061373681612d92565b92915050565b60006020828403121561375257613751612c72565b5b600061376084828501613727565b91505092915050565b600060608201905061377e6000830186612ebd565b61378b6020830185613142565b818103604083015261379d81846133c4565b9050949350505050565b7f2172656d6f746500000000000000000000000000000000000000000000000000600082015250565b60006137dd60078361351b565b91506137e8826137a7565b602082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008160f81b9050919050565b600061385a82613842565b9050919050565b61387261386d82613208565b61384f565b82525050565b6000819050919050565b61389361388e82612ce7565b613878565b82525050565b60008160601b9050919050565b60006138b182613899565b9050919050565b60006138c3826138a6565b9050919050565b6138db6138d682612c7c565b6138b8565b82525050565b6000819050919050565b6138fc6138f782612c34565b6138e1565b82525050565b600081905092915050565b60006139198385613902565b9350613926838584613000565b82840190509392505050565b600061393e828a613861565b60018201915061394e8289613882565b60208201915061395e82886138ca565b60148201915061396e8287613861565b60018201915061397e82866138eb565b60208201915061398f82848661390d565b915081905098975050505050505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006139fc602e8361351b565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613a68601d8361351b565b9150613a7382613a32565b602082019050919050565b60006020820190508181036000830152613a9781613a5b565b9050919050565b50565b6000613aae600083613902565b9150613ab982613a9e565b600082019050919050565b6000613acf82613aa1565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613b35603a8361351b565b9150613b4082613ad9565b604082019050919050565b60006020820190508181036000830152613b6481613b28565b9050919050565b7f56616c696469747920617373657274696f6e206661696c656400000000000000600082015250565b6000613ba160198361351b565b9150613bac82613b6b565b602082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b600081905092915050565b7f5479706520617373657274696f6e206661696c65642e20476f74203078000000600082015250565b6000613c18601d83613bd7565b9150613c2382613be2565b601d82019050919050565b600069ffffffffffffffffffff82169050919050565b60008160b01b9050919050565b6000613c5c82613c44565b9050919050565b613c74613c6f82613c2e565b613c51565b82525050565b7f2e20457870656374656420307800000000000000000000000000000000000000600082015250565b6000613cb0600d83613bd7565b9150613cbb82613c7a565b600d82019050919050565b6000613cd182613c0b565b9150613cdd8285613c63565b600a82019150613cec82613ca3565b9150613cf88284613c63565b600a820191508190509392505050565b600081519050919050565b6000613d1e82613d08565b613d28818561351b565b9350613d38818560208601613391565b613d4181612f43565b840191505092915050565b60006020820190508181036000830152613d668184613d13565b905092915050565b7f54797065644d656d566965772f696e646578202d20417474656d70746564207460008201527f6f20696e646578206d6f7265207468616e203332206279746573000000000000602082015250565b6000613dca603a8361351b565b9150613dd582613d6e565b604082019050919050565b60006020820190508181036000830152613df981613dbd565b9050919050565b6000613e0b82613208565b9150613e1683613208565b925082821015613e2957613e2861323f565b5b828203905092915050565b6000613e3f82613208565b9150613e4a83613208565b92508160ff0483118215151615613e6457613e6361323f565b5b828202905092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613ecb602b8361351b565b9150613ed682613e6f565b604082019050919050565b60006020820190508181036000830152613efa81613ebe565b9050919050565b7f54797065644d656d566965772f696e646578202d204f76657272616e2074686560008201527f20766965772e20536c6963652069732061742030780000000000000000000000602082015250565b6000613f5d603583613bd7565b9150613f6882613f01565b603582019050919050565b600065ffffffffffff82169050919050565b60008160d01b9050919050565b6000613f9d82613f85565b9050919050565b613fb5613fb082613f73565b613f92565b82525050565b7f2077697468206c656e6774682030780000000000000000000000000000000000600082015250565b6000613ff1600f83613bd7565b9150613ffc82613fbb565b600f82019050919050565b7f2e20417474656d7074656420746f20696e646578206174206f6666736574203060008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b6000614063602183613bd7565b915061406e82614007565b602182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b60006140af600183613bd7565b91506140ba82614079565b600182019050919050565b60006140d082613f50565b91506140dc8287613fa4565b6006820191506140eb82613fe4565b91506140f78286613fa4565b60068201915061410682614056565b91506141128285613fa4565b60068201915061412182613fe4565b915061412d8284613fa4565b60068201915061413c826140a2565b915081905095945050505050565b7f54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e7460008201527f6572206465726566000000000000000000000000000000000000000000000000602082015250565b60006141a660288361351b565b91506141b18261414a565b604082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f54797065644d656d566965772f636f7079546f202d20496e76616c696420706f60008201527f696e746572206465726566000000000000000000000000000000000000000000602082015250565b6000614238602b8361351b565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b905091905056fea164736f6c634300080b000a",
  "deployedBytecode": "0x6080604052600436106101445760003560e01c80638da5cb5b116100b6578063d1851c921161006f578063d1851c921461041c578063d232c22014610447578063de4b054814610472578063dfefb7d71461049d578063fc89d377146104c6578063ffa1ad74146104e25761014b565b80638da5cb5b14610336578063ab2dc3f514610361578063b1f8100d1461038a578063b49c53a7146103b3578063c4d66de8146103dc578063c5b350df146104055761014b565b80635540f1c0116101085780635540f1c01461023557806365d82b8b146102515780636a42b8f81461027a5780637080f771146102a5578063715018a6146102e257806383bbb806146102f95761014b565b80633339df96146101505780633cf52ffb1461017b57806341bdc8b5146101a65780634d6f2013146101cf5780634fa6b634146101f85761014b565b3661014b57005b600080fd5b34801561015c57600080fd5b5061016561050d565b6040516101729190612c19565b60405180910390f35b34801561018757600080fd5b50610190610533565b60405161019d9190612c4d565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c89190612cba565b61053d565b005b3480156101db57600080fd5b506101f660048036038101906101f19190612cba565b610608565b005b34801561020457600080fd5b5061021f600480360381019061021a9190612d1d565b610716565b60405161022c9190612c4d565b60405180910390f35b61024f600480360381019061024a9190612d1d565b61072e565b005b34801561025d57600080fd5b5061027860048036038101906102739190612e23565b61086c565b005b34801561028657600080fd5b5061028f610b04565b60405161029c9190612c4d565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612d1d565b610b0f565b6040516102d99190612ecc565b60405180910390f35b3480156102ee57600080fd5b506102f7610b27565b005b34801561030557600080fd5b50610320600480360381019061031b9190612ee7565b610ce9565b60405161032d9190612ecc565b60405180910390f35b34801561034257600080fd5b5061034b610d01565b6040516103589190612f23565b60405180910390f35b34801561036d57600080fd5b506103886004803603810190610383919061307f565b610d2a565b005b34801561039657600080fd5b506103b160048036038101906103ac9190612cba565b610ebc565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190613102565b611098565b005b3480156103e857600080fd5b5061040360048036038101906103fe9190612cba565b611147565b005b34801561041157600080fd5b5061041a6111dd565b005b34801561042857600080fd5b506104316112da565b60405161043e9190612f23565b60405180910390f35b34801561045357600080fd5b5061045c611304565b6040516104699190613151565b60405180910390f35b34801561047e57600080fd5b5061048761135c565b604051610494919061318d565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906131a8565b611382565b005b6104e060048036038101906104db9190612d1d565b61172a565b005b3480156104ee57600080fd5b506104f7611831565b6040516105049190613224565b60405180910390f35b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105c4576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461068f576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8ff00ea0f06ea523b8f4b80a53bb86b4967c9909b4e354b47a83371249ad57f360405160405180910390a250565b60cc6020528060005260406000206000915090505481565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b5576040517f2c4b07cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003414156107f0576040517fff4355d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3460cc60008381526020019081526020016000206000828254610813919061326e565b92505081905550807fe01346f7c5b12b318c8239d37465281e572012b3f898085a3d2ed142ba2fa15d3460cc60008581526020019081526020016000205433604051610861939291906132c4565b60405180910390a250565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f3576040517f2c4b07cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828290501415610931576040517f49f88d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610998576040517f91ca0fb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109a387611836565b905060006109b487878787876118a5565b9050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a479190613339565b73ffffffffffffffffffffffffffffffffffffffff1663fa31de018984846040518463ffffffff1660e01b8152600401610a83939291906133fd565b600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050507fa1d84c22c68d469068eaf6be2c49fd6f9120f7e4176ba1dc8027e5e1cdce1f918883898989898988604051610af2989796959493929190613468565b60405180910390a15050505050505050565b600062093a80905090565b60cb6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bae576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002541415610beb576040517f392cc0fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8060025442610bfd91906134e7565b11610c34576040517f86d4b3f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f23295ef900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ce7600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611901565b565b60666020528060005260406000206000915090505481565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d3333611a10565b610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613578565b60405180910390fd5b8382610d7e8282611ab5565b610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906135e4565b60405180910390fd5b6000610de1610dd6600086611ae190919063ffffffff16565b62ffffff1916611b0c565b90506000610df48262ffffff1916611b2c565b90506000610e078362ffffff1916611b83565b90506000610e1a8462ffffff1916611bd7565b90506000610e2d8562ffffff1916611c31565b9050610e3e8562ffffff1916611ca6565b60cb6000868152602001908152602001600020819055508a63ffffffff16610e668c8c611ce9565b67ffffffffffffffff167f878c51ec082a65de8c0a9e68ec34c48c86f4d76ae6d693587eb4420611ae0f51868686868e604051610ea7959493929190613604565b60405180910390a35050505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f43576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610fcd5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611004576040517f23780cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561108c576040517f945f6e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61109581611d10565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111f576040517f8d450dd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80606660008463ffffffff1663ffffffff168152602001908152602001600020819055505050565b60006111536001611dc0565b90508015611177576001600060016101000a81548160ff0219169083151502179055505b61118082611eb0565b80156111d95760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516111d091906136a0565b60405180910390a15b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f234fe4e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a806002544261127691906134e7565b116112ad576040517fd39c12bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d8600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611901565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260985414156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613707565b60405180910390fd5b6002609881905550600060cb60008581526020019081526020016000205490506000801b811415611425576040517f3099ed6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061148d611482600086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611ae190919063ffffffff16565b62ffffff1916611b0c565b905061149e8162ffffff1916611ca6565b82146114d6576040517f1048e03a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cba8b6a336040518263ffffffff1660e01b81526004016115319190612f23565b602060405180830381865afa15801561154e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611572919061373c565b6115a8576040517fbe95c75000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115b98262ffffff1916611b83565b90506115c481611f86565b6115fa576040517fe94778c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060cc600088815260200190815260200160002054905060cb600088815260200190815260200160002060009055600060cc6000898152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663034baf0e8861166e8662ffffff1916611bd7565b61167d8762ffffff1916611c31565b6040518463ffffffff1660e01b815260040161169b93929190613769565b600060405180830381600087803b1580156116b557600080fd5b505af11580156116c9573d6000803e3d6000fd5b50505050867f25639428fb03bb25e9ccc77977e8f4ed022248bae7422d898c57f328d21ad75d336040516116fd9190612f23565b60405180910390a26000811115611719576117183382611fa9565b5b505050506001609881905550505050565b6000341415611765576040517ffc7f537c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000801b60cb60008381526020019081526020016000205414156117b5576040517f53b0f6d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3460cc600083815260200190815260200160002060008282546117d8919061326e565b92505081905550807fe01346f7c5b12b318c8239d37465281e572012b3f898085a3d2ed142ba2fa15d3460cc60008581526020019081526020016000205433604051611826939291906132c4565b60405180910390a250565b600081565b6000606660008363ffffffff1663ffffffff1681526020019081526020016000205490506000801b8114156118a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611897906137f3565b60405180910390fd5b919050565b60606001808111156118ba576118b9613813565b5b8686866118c85760006118cb565b60015b8686905087876040516020016118e79796959493929190613932565b604051602081830303815290604052905095945050505050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002819055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635190bc53836040518263ffffffff1660e01b8152600401611a6d9190612f23565b602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae919061373c565b9050919050565b600081606660008563ffffffff1663ffffffff1681526020019081526020016000205414905092915050565b600080835190506000602085019050611b028464ffffffffff16828461209d565b9250505092915050565b6000611b25611b1a83612105565b62ffffff1916612157565b9050919050565b6000816001611b5c816001811115611b4757611b46613813565b5b8362ffffff19166121a990919063ffffffff16565b50611b7a600160208662ffffff19166122579092919063ffffffff16565b92505050919050565b6000816001611bb3816001811115611b9e57611b9d613813565b5b8362ffffff19166121a990919063ffffffff16565b50611bce60218562ffffff191661239c90919063ffffffff16565b92505050919050565b6000816001611c07816001811115611bf257611bf1613813565b5b8362ffffff19166121a990919063ffffffff16565b506001611c27603560018762ffffff19166123b29092919063ffffffff16565b1492505050919050565b6060816001611c61816001811115611c4c57611c4b613813565b5b8362ffffff19166121a990919063ffffffff16565b506000611c6d856123e9565b9050611c9c611c9160568360008962ffffff191661240f909392919063ffffffff16565b62ffffff19166124a6565b9350505050919050565b600080611cb2836124ed565b6bffffffffffffffffffffffff1690506000611ccd8461250d565b6bffffffffffffffffffffffff16905080822092505050919050565b60008163ffffffff1660208463ffffffff1667ffffffffffffffff16901b17905092915050565b4260028190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a60405160405180910390a250565b60008060019054906101000a900460ff1615611e375760018260ff16148015611def5750611ded30611f86565b155b611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613a12565b60405180910390fd5b60009050611eab565b8160ff1660008054906101000a900460ff1660ff1610611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390613a12565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b6000611ebc6001611dc0565b90508015611ee0576001600060016101000a81548160ff0219169083151502179055505b81603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f2961252d565b8015611f825760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611f7991906136a0565b60405180910390a15b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b80471015611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390613a7e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161201290613ac4565b60006040518083038185875af1925050503d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b5050905080612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90613b4b565b60405180910390fd5b505050565b60008082846120ac919061326e565b90506040518111156120bd57600090505b60008114156120ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506120fe565b6120fa858585612586565b9150505b9392505050565b6000612110826125a7565b156121475761214060018081111561212b5761212a613813565b5b8362ffffff191661260690919063ffffffff16565b9050612152565b61214f612621565b90505b919050565b600061216282612649565b6121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890613bb7565b60405180910390fd5b819050919050565b60006121b5838361268c565b61224e5760006121d36121c7856126af565b64ffffffffff166126bc565b91505060006121e88464ffffffffff166126bc565b91505060008282604051602001612200929190613cc6565b6040516020818303038152906040529050806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459190613d4c565b60405180910390fd5b82905092915050565b6000808260ff16141561226f576000801b9050612395565b6122788461250d565b6bffffffffffffffffffffffff168260ff1684612295919061326e565b1115612312576122d66122a7856124ed565b6bffffffffffffffffffffffff166122be8661250d565b6bffffffffffffffffffffffff16858560ff1661277a565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123099190613d4c565b60405180910390fd5b60208260ff161115612359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235090613de0565b60405180910390fd5b6000600883029050600061236c866124ed565b6bffffffffffffffffffffffff1690506000612387836127e8565b905080868301511693505050505b9392505050565b60006123aa838360146123b2565b905092915050565b600060088260206123c39190613e00565b6123cd9190613e34565b60ff166123db858585612257565b60001c901c90509392505050565b6000612408603660208462ffffff19166123b29092919063ffffffff16565b9050919050565b60008061241b866124ed565b6bffffffffffffffffffffffff16905061243486612817565b848683612441919061326e565b61244b919061326e565b111561247a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061249e565b8481612486919061326e565b905061249a8364ffffffffff16828661209d565b9150505b949350505050565b60606000806124b48461250d565b6bffffffffffffffffffffffff16905060405191508192506124d98460208401612841565b506020818301016040528082525050919050565b6000806bffffffffffffffffffffffff9050808360781c16915050919050565b6000806bffffffffffffffffffffffff9050808360181c16915050919050565b600060019054906101000a900460ff1661257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390613ee1565b60405180910390fd5b61258461294c565b565b600083811760601b905082811760601b905081811760181b90509392505050565b6000806125b98362ffffff191661250d565b6bffffffffffffffffffffffff16905060006125d4846123e9565b90506056821180156125e65750600081115b80156125fd5750818160566125fb919061326e565b145b92505050919050565b60008260281b60281c811790508160d81b8117905092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000905090565b600064ffffffffff61265a836126af565b64ffffffffff1614156126705760009050612687565b600061267b83612817565b90506040518111199150505b919050565b60008164ffffffffff1661269f846126af565b64ffffffffff1614905092915050565b60008160d81c9050919050565b6000806000601f90505b600f8160ff1611156127195760006008826126e19190613e34565b60ff1685901c90506126f2816129a6565b61ffff168417935060108260ff161461270d57601084901b93505b600182039150506126c6565b506000600f90505b60ff8160ff16101561277457600060088261273c9190613e34565b60ff1685901c905061274d816129a6565b61ffff168317925060008260ff161461276857601083901b92505b60018203915050612721565b50915091565b60606000612787866126bc565b9150506000612795866126bc565b91505060006127a3866126bc565b91505060006127b1866126bc565b915050838383836040516020016127cb94939291906140c5565b604051602081830303815290604052945050505050949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000600183031d9050919050565b60006128228261250d565b61282b836124ed565b016bffffffffffffffffffffffff169050919050565b600061284c836129df565b61288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612882906141bc565b60405180910390fd5b61289483612649565b6128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca9061424e565b60405180910390fd5b60006128de8461250d565b6bffffffffffffffffffffffff16905060006128f9856124ed565b6bffffffffffffffffffffffff169050600060405190508481111561291e5760206060fd5b8285848460045afa50612941612933876126af565b64ffffffffff168685612586565b935050505092915050565b600060019054906101000a900460ff1661299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299290613ee1565b60405180910390fd5b6129a433611901565b565b60006129b860048360ff16901c6129f2565b60ff168117905060088161ffff16901b90506129d3826129f2565b60ff1681179050919050565b60006129ea82612b62565b159050919050565b60008060f08317905060f08160ff161415612a11576030915050612b5d565b60f18160ff161415612a27576031915050612b5d565b60f28160ff161415612a3d576032915050612b5d565b60f38160ff161415612a53576033915050612b5d565b60f48160ff161415612a69576034915050612b5d565b60f58160ff161415612a7f576035915050612b5d565b60f68160ff161415612a95576036915050612b5d565b60f78160ff161415612aab576037915050612b5d565b60f88160ff161415612ac1576038915050612b5d565b60f98160ff161415612ad7576039915050612b5d565b60fa8160ff161415612aed576061915050612b5d565b60fb8160ff161415612b03576062915050612b5d565b60fc8160ff161415612b19576063915050612b5d565b60fd8160ff161415612b2f576064915050612b5d565b60fe8160ff161415612b45576065915050612b5d565b60ff8160ff161415612b5b576066915050612b5d565b505b919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000062ffffff19168262ffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612bdf612bda612bd584612b9a565b612bba565b612b9a565b9050919050565b6000612bf182612bc4565b9050919050565b6000612c0382612be6565b9050919050565b612c1381612bf8565b82525050565b6000602082019050612c2e6000830184612c0a565b92915050565b6000819050919050565b612c4781612c34565b82525050565b6000602082019050612c626000830184612c3e565b92915050565b6000604051905090565b600080fd5b600080fd5b6000612c8782612b9a565b9050919050565b612c9781612c7c565b8114612ca257600080fd5b50565b600081359050612cb481612c8e565b92915050565b600060208284031215612cd057612ccf612c72565b5b6000612cde84828501612ca5565b91505092915050565b6000819050919050565b612cfa81612ce7565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612c72565b5b6000612d4184828501612d08565b91505092915050565b600063ffffffff82169050919050565b612d6381612d4a565b8114612d6e57600080fd5b50565b600081359050612d8081612d5a565b92915050565b60008115159050919050565b612d9b81612d86565b8114612da657600080fd5b50565b600081359050612db881612d92565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612de357612de2612dbe565b5b8235905067ffffffffffffffff811115612e0057612dff612dc3565b5b602083019150836001820283011115612e1c57612e1b612dc8565b5b9250929050565b60008060008060008060a08789031215612e4057612e3f612c72565b5b6000612e4e89828a01612d71565b9650506020612e5f89828a01612d08565b9550506040612e7089828a01612ca5565b9450506060612e8189828a01612da9565b935050608087013567ffffffffffffffff811115612ea257612ea1612c77565b5b612eae89828a01612dcd565b92509250509295509295509295565b612ec681612ce7565b82525050565b6000602082019050612ee16000830184612ebd565b92915050565b600060208284031215612efd57612efc612c72565b5b6000612f0b84828501612d71565b91505092915050565b612f1d81612c7c565b82525050565b6000602082019050612f386000830184612f14565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f8c82612f43565b810181811067ffffffffffffffff82111715612fab57612faa612f54565b5b80604052505050565b6000612fbe612c68565b9050612fca8282612f83565b919050565b600067ffffffffffffffff821115612fea57612fe9612f54565b5b612ff382612f43565b9050602081019050919050565b82818337600083830152505050565b600061302261301d84612fcf565b612fb4565b90508281526020810184848401111561303e5761303d612f3e565b5b613049848285613000565b509392505050565b600082601f83011261306657613065612dbe565b5b813561307684826020860161300f565b91505092915050565b6000806000806080858703121561309957613098612c72565b5b60006130a787828801612d71565b94505060206130b887828801612d71565b93505060406130c987828801612d08565b925050606085013567ffffffffffffffff8111156130ea576130e9612c77565b5b6130f687828801613051565b91505092959194509250565b6000806040838503121561311957613118612c72565b5b600061312785828601612d71565b925050602061313885828601612d08565b9150509250929050565b61314b81612d86565b82525050565b60006020820190506131666000830184613142565b92915050565b600061317782612be6565b9050919050565b6131878161316c565b82525050565b60006020820190506131a2600083018461317e565b92915050565b6000806000604084860312156131c1576131c0612c72565b5b60006131cf86828701612d08565b935050602084013567ffffffffffffffff8111156131f0576131ef612c77565b5b6131fc86828701612dcd565b92509250509250925092565b600060ff82169050919050565b61321e81613208565b82525050565b60006020820190506132396000830184613215565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061327982612c34565b915061328483612c34565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132b9576132b861323f565b5b828201905092915050565b60006060820190506132d96000830186612c3e565b6132e66020830185612c3e565b6132f36040830184612f14565b949350505050565b600061330682612c7c565b9050919050565b613316816132fb565b811461332157600080fd5b50565b6000815190506133338161330d565b92915050565b60006020828403121561334f5761334e612c72565b5b600061335d84828501613324565b91505092915050565b61336f81612d4a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133af578082015181840152602081019050613394565b838111156133be576000848401525b50505050565b60006133cf82613375565b6133d98185613380565b93506133e9818560208601613391565b6133f281612f43565b840191505092915050565b60006060820190506134126000830186613366565b61341f6020830185612ebd565b818103604083015261343181846133c4565b9050949350505050565b60006134478385613380565b9350613454838584613000565b61345d83612f43565b840190509392505050565b600060e08201905061347d600083018b613366565b61348a602083018a612ebd565b6134976040830189612ebd565b6134a46060830188612f14565b6134b16080830187613142565b81810360a08301526134c481858761343b565b905081810360c08301526134d881846133c4565b90509998505050505050505050565b60006134f282612c34565b91506134fd83612c34565b9250828210156135105761350f61323f565b5b828203905092915050565b600082825260208201905092915050565b7f217265706c696361000000000000000000000000000000000000000000000000600082015250565b600061356260088361351b565b915061356d8261352c565b602082019050919050565b6000602082019050818103600083015261359181613555565b9050919050565b7f2172656d6f746520726f75746572000000000000000000000000000000000000600082015250565b60006135ce600e8361351b565b91506135d982613598565b602082019050919050565b600060208201905081810360008301526135fd816135c1565b9050919050565b600060a0820190506136196000830188612ebd565b6136266020830187612f14565b6136336040830186613142565b818103606083015261364581856133c4565b9050818103608083015261365981846133c4565b90509695505050505050565b6000819050919050565b600061368a61368561368084613665565b612bba565b613208565b9050919050565b61369a8161366f565b82525050565b60006020820190506136b56000830184613691565b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136f1601f8361351b565b91506136fc826136bb565b602082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b60008151905061373681612d92565b92915050565b60006020828403121561375257613751612c72565b5b600061376084828501613727565b91505092915050565b600060608201905061377e6000830186612ebd565b61378b6020830185613142565b818103604083015261379d81846133c4565b9050949350505050565b7f2172656d6f746500000000000000000000000000000000000000000000000000600082015250565b60006137dd60078361351b565b91506137e8826137a7565b602082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008160f81b9050919050565b600061385a82613842565b9050919050565b61387261386d82613208565b61384f565b82525050565b6000819050919050565b61389361388e82612ce7565b613878565b82525050565b60008160601b9050919050565b60006138b182613899565b9050919050565b60006138c3826138a6565b9050919050565b6138db6138d682612c7c565b6138b8565b82525050565b6000819050919050565b6138fc6138f782612c34565b6138e1565b82525050565b600081905092915050565b60006139198385613902565b9350613926838584613000565b82840190509392505050565b600061393e828a613861565b60018201915061394e8289613882565b60208201915061395e82886138ca565b60148201915061396e8287613861565b60018201915061397e82866138eb565b60208201915061398f82848661390d565b915081905098975050505050505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006139fc602e8361351b565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613a68601d8361351b565b9150613a7382613a32565b602082019050919050565b60006020820190508181036000830152613a9781613a5b565b9050919050565b50565b6000613aae600083613902565b9150613ab982613a9e565b600082019050919050565b6000613acf82613aa1565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613b35603a8361351b565b9150613b4082613ad9565b604082019050919050565b60006020820190508181036000830152613b6481613b28565b9050919050565b7f56616c696469747920617373657274696f6e206661696c656400000000000000600082015250565b6000613ba160198361351b565b9150613bac82613b6b565b602082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b600081905092915050565b7f5479706520617373657274696f6e206661696c65642e20476f74203078000000600082015250565b6000613c18601d83613bd7565b9150613c2382613be2565b601d82019050919050565b600069ffffffffffffffffffff82169050919050565b60008160b01b9050919050565b6000613c5c82613c44565b9050919050565b613c74613c6f82613c2e565b613c51565b82525050565b7f2e20457870656374656420307800000000000000000000000000000000000000600082015250565b6000613cb0600d83613bd7565b9150613cbb82613c7a565b600d82019050919050565b6000613cd182613c0b565b9150613cdd8285613c63565b600a82019150613cec82613ca3565b9150613cf88284613c63565b600a820191508190509392505050565b600081519050919050565b6000613d1e82613d08565b613d28818561351b565b9350613d38818560208601613391565b613d4181612f43565b840191505092915050565b60006020820190508181036000830152613d668184613d13565b905092915050565b7f54797065644d656d566965772f696e646578202d20417474656d70746564207460008201527f6f20696e646578206d6f7265207468616e203332206279746573000000000000602082015250565b6000613dca603a8361351b565b9150613dd582613d6e565b604082019050919050565b60006020820190508181036000830152613df981613dbd565b9050919050565b6000613e0b82613208565b9150613e1683613208565b925082821015613e2957613e2861323f565b5b828203905092915050565b6000613e3f82613208565b9150613e4a83613208565b92508160ff0483118215151615613e6457613e6361323f565b5b828202905092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613ecb602b8361351b565b9150613ed682613e6f565b604082019050919050565b60006020820190508181036000830152613efa81613ebe565b9050919050565b7f54797065644d656d566965772f696e646578202d204f76657272616e2074686560008201527f20766965772e20536c6963652069732061742030780000000000000000000000602082015250565b6000613f5d603583613bd7565b9150613f6882613f01565b603582019050919050565b600065ffffffffffff82169050919050565b60008160d01b9050919050565b6000613f9d82613f85565b9050919050565b613fb5613fb082613f73565b613f92565b82525050565b7f2077697468206c656e6774682030780000000000000000000000000000000000600082015250565b6000613ff1600f83613bd7565b9150613ffc82613fbb565b600f82019050919050565b7f2e20417474656d7074656420746f20696e646578206174206f6666736574203060008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b6000614063602183613bd7565b915061406e82614007565b602182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b60006140af600183613bd7565b91506140ba82614079565b600182019050919050565b60006140d082613f50565b91506140dc8287613fa4565b6006820191506140eb82613fe4565b91506140f78286613fa4565b60068201915061410682614056565b91506141128285613fa4565b60068201915061412182613fe4565b915061412d8284613fa4565b60068201915061413c826140a2565b915081905095945050505050565b7f54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e7460008201527f6572206465726566000000000000000000000000000000000000000000000000602082015250565b60006141a660288361351b565b91506141b18261414a565b604082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f54797065644d656d566965772f636f7079546f202d20496e76616c696420706f60008201527f696e746572206465726566000000000000000000000000000000000000000000602082015250565b6000614238602b8361351b565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b905091905056fea164736f6c634300080b000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
