{
  "_format": "hh-sol-artifact-1",
  "contractName": "SmartWallet",
  "sourceName": "contracts/smartwallet/SmartWallet.sol",
  "abi": [
    {
      "inputs": [],
      "name": "DATA_VERSION_HASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "directExecute",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "ret",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "domainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "suffixData",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "relayHub",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenGas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "validUntilTime",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "feesReceiver",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "sig",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "ret",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwner",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "owner",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenAddr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenRecipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenGas",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isInitialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "swTemplate",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "destinationContract",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "recover",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "ret",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "suffixData",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "relayHub",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenContract",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenGas",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "validUntilTime",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "sig",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b610088565b6000816040516020016100329190610070565b60408051601f1981840301815291905280516020909101207fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a555050565b60609190911b6001600160601b031916815260140190565b611742806100976000396000f3fe6080604052600436106100b55760003560e01c8063893d20e811610069578063affed0e01161004e578063affed0e014610197578063b3104ef6146101ac578063f698da25146101c1576100bc565b8063893d20e814610155578063a6b63eb814610177576100bc565b8063392e53cd1161009a578063392e53cd1461010d5780633b54ccc31461012f57806375a6dad714610142576100bc565b806306105d29146100c1578063244f53b5146100e3576100bc565b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004611075565b6101d6565b005b6100f66100f1366004610f7f565b61021d565b6040516101049291906112fc565b60405180910390f35b34801561011957600080fd5b50610122610315565b60405161010491906112f1565b6100f661013d366004610e93565b610335565b6100f6610150366004610ff2565b61049c565b34801561016157600080fd5b5061016a61073e565b6040516101049190611338565b34801561018357600080fd5b506100e1610192366004610f25565b610763565b3480156101a357600080fd5b5061016a6108a0565b3480156101b857600080fd5b5061016a6108a6565b3480156101cd57600080fd5b5061016a6108ca565b610217848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d092505050565b50505050565b600060603360405160200161023291906110e2565b6040516020818303038152906040528051906020012061025061073e565b146102765760405162461bcd60e51b815260040161026d9061166c565b60405180910390fd5b846001600160a01b03163485856040516102919291906111ab565b60006040518083038185875af1925050503d80600081146102ce576040519150601f19603f3d011682016040523d82523d6000602084013e6102d3565b606091505b509092509050471561030d5760405133904780156108fc02916000818181858888f1935050505015801561030b573d6000803e3d6000fd5b505b935093915050565b60008061032061073e565b141561032e57506000610332565b5060015b90565b60006060600060ff60f81b898b3389604051602001610356939291906110ff565b604051602081830303815290604052805190602001208a60405160200161037d91906111d7565b604051602081830303815290604052805190602001206040516020016103a6949392919061112d565b60408051601f19818403018152919052805160209091012090506001600160a01b03811630146103e85760405162461bcd60e51b815260040161026d906113c2565b6001600160a01b0387161561045b57866001600160a01b03163486866040516104129291906111ab565b60006040518083038185875af1925050503d806000811461044f576040519150601f19603f3d011682016040523d82523d6000602084013e610454565b606091505b5090935091505b471561048f5760405133904780156108fc02916000818181858888f1935050505015801561048d573d6000803e3d6000fd5b505b5097509795505050505050565b6000606085600001516001600160a01b0316336001600160a01b0316146104d55760405162461bcd60e51b815260040161026d90611467565b610516878786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d092505050565b610120860151158061052c575042866101200151115b6105485760405162461bcd60e51b815260040161026d906114e0565b60008054600101905560e08601511561065a5785606001516001600160a01b0316866101000151868860e001516040516024016105869291906112d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052516105d091906111bb565b60006040518083038160008787f1925050503d806000811461060e576040519150601f19603f3d011682016040523d82523d6000602084013e610613565b606091505b50909250905081801561063e57508051158061063e57508080602001905181019061063e9190610fd2565b61065a5760405162461bcd60e51b815260040161026d90611559565b8560a001515a1161067d5760405162461bcd60e51b815260040161026d906115fe565b85604001516001600160a01b03168660a0015187608001518861014001516040516106a891906111bb565b600060405180830381858888f193505050503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b50909250905047156107345760208601516040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610732573d6000803e3d6000fd5b505b9550959350505050565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5490565b600061076d61073e565b1461078a5760405162461bcd60e51b815260040161026d90611635565b610793856109bc565b81156108915760006060856001600160a01b03168386866040516024016107bb9291906112d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1790525161080591906111bb565b60006040518083038160008787f1925050503d8060008114610843576040519150601f19603f3d011682016040523d82523d6000602084013e610848565b606091505b50915091508180156108725750805115806108725750808060200190518101906108729190610fd2565b61088e5760405162461bcd60e51b815260040161026d906115c7565b50505b610899610a0d565b5050505050565b60005481565b7fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a581565b60015481565b6020808301516040516108e392016110e2565b6040516020818303038152906040528051906020012061090161073e565b1461091e5760405162461bcd60e51b815260040161026d9061166c565b8160c00151600054146109435760405162461bcd60e51b815260040161026d90611430565b61099b610991826001546109578787610aaa565b805160209182012060405161096d939201611240565b60405160208183030381529060405280519060200120610b5790919063ffffffff16565b8360200151610ba2565b6109b75760405162461bcd60e51b815260040161026d90611590565b505050565b6000816040516020016109cf91906110e2565b60408051601f1981840301815291905280516020909101207fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a555050565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd41b7f69f4d7734774d21b5548d74704ad02f9f1545db63927a1d58479c576c87fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5610a78610bfd565b30604051602001610a8d959493929190611341565b60408051601f198184030181529190528051602090910120600155565b8051602080830151604080850151606086810151608088015160a089015160c08a015160e08b01516101008c01516101208d01516101408e01518051908d01209951979c7fdbc4f1d96529fadae86244f9c7b2dc871009d2ad633f32fb7833efcc2c0d53709c610b1f9c919b919a9901611276565b60408051601f1981840301815290829052610b3f9291869060200161117e565b60405160208183030381529060405290505b92915050565b60008151604114610b7a5760405162461bcd60e51b815260040161026d906113f9565b60208201516040830151606084015160001a610b9886828585610c01565b9695505050505050565b6000816001600160a01b0316836001600160a01b0316148015610be2575073dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b03841614155b8015610bf657506001600160a01b03831615155b9392505050565b4690565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610c435760405162461bcd60e51b815260040161026d9061149e565b8360ff16601b1480610c5857508360ff16601c145b610c745760405162461bcd60e51b815260040161026d90611517565b600060018686868660405160008152602001604052604051610c99949392919061136d565b6020604051602081039080840390855afa158015610cbb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cee5760405162461bcd60e51b815260040161026d9061138b565b95945050505050565b80356001600160a01b0381168114610b5157600080fd5b60008083601f840112610d1f578182fd5b50813567ffffffffffffffff811115610d36578182fd5b602083019150836020828501011115610d4e57600080fd5b9250929050565b600082601f830112610d65578081fd5b813567ffffffffffffffff811115610d7b578182fd5b610d8e601f8201601f19166020016116a1565b9150808252836020828501011115610da557600080fd5b8060208401602084013760009082016020015292915050565b6000610160808385031215610dd1578182fd5b610dda816116a1565b915050610de78383610cf7565b8152610df68360208401610cf7565b6020820152610e088360408401610cf7565b6040820152610e1a8360608401610cf7565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff811115610e7b57600080fd5b610e8785828601610d55565b82840152505092915050565b600080600080600080600060c0888a031215610ead578283fd5b610eb78989610cf7565b9650610ec68960208a01610cf7565b9550610ed58960408a01610cf7565b9450610ee48960608a01610cf7565b93506080880135925060a088013567ffffffffffffffff811115610f06578283fd5b610f128a828b01610d0e565b989b979a50959850939692959293505050565b600080600080600060a08688031215610f3c578081fd5b8535610f47816116f4565b94506020860135610f57816116f4565b93506040860135610f67816116f4565b94979396509394606081013594506080013592915050565b600080600060408486031215610f93578283fd5b8335610f9e816116f4565b9250602084013567ffffffffffffffff811115610fb9578283fd5b610fc586828701610d0e565b9497909650939450505050565b600060208284031215610fe3578081fd5b81518015158114610bf6578182fd5b600080600080600060808688031215611009578081fd5b85359450602086013567ffffffffffffffff80821115611027578283fd5b61103389838a01610dbe565b95506110428960408a01610cf7565b94506060880135915080821115611057578283fd5b5061106488828901610d0e565b969995985093965092949392505050565b6000806000806060858703121561108a578384fd5b84359350602085013567ffffffffffffffff808211156110a8578485fd5b6110b488838901610dbe565b945060408701359150808211156110c9578384fd5b506110d687828801610d0e565b95989497509550505050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6bffffffffffffffffffffffff19606094851b811682529290931b9091166014830152602882015260480190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b600084825283516111968160208501602088016116c8565b60209201918201929092526040019392505050565b6000828483379101908152919050565b600082516111cd8184602087016116c8565b9190910192915050565b7f602d3d8160093d39f3363d3d373d3d3d3d363d73000000000000000000000000815260609190911b6bffffffffffffffffffffffff191660148201527f5af43d923d90803e602b57fd5bf3000000000000000000000000000000000000602882015260360190565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b039b8c168152998b1660208b0152978a1660408a0152959098166060880152608087019390935260a086019190915260c085015260e08401526101008301939093526101208201929092526101408101919091526101600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600083151582526040602083015282518060408401526113238160608501602087016116c8565b601f01601f1916919091016060019392505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526011908201527f496e76616c6964207265636f7665726572000000000000000000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252600e908201527f6e6f6e6365206d69736d61746368000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f496e76616c69642063616c6c6572000000000000000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526013908201527f53573a2072657175657374206578706972656400000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526017908201527f556e61626c6520746f2070617920666f722072656c6179000000000000000000604082015260600190565b60208082526012908201527f5369676e6174757265206d69736d617463680000000000000000000000000000604082015260600190565b6020808252601c908201527f556e61626c6520746f2070617920666f72206465706c6f796d656e7400000000604082015260600190565b60208082526013908201527f4e6f7420656e6f75676820676173206c65667400000000000000000000000000604082015260600190565b60208082526013908201527f416c726561647920696e697469616c697a656400000000000000000000000000604082015260600190565b6020808252818101527f4e6f7420746865206f776e6572206f662074686520536d61727457616c6c6574604082015260600190565b60405181810167ffffffffffffffff811182821017156116c057600080fd5b604052919050565b60005b838110156116e35781810151838201526020016116cb565b838111156102175750506000910152565b6001600160a01b038116811461170957600080fd5b5056fea264697066735822122060f175bc1a9f187ca8085dba138a13c269b43c027452ad963dbb5e6bdcd6315664736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106100b55760003560e01c8063893d20e811610069578063affed0e01161004e578063affed0e014610197578063b3104ef6146101ac578063f698da25146101c1576100bc565b8063893d20e814610155578063a6b63eb814610177576100bc565b8063392e53cd1161009a578063392e53cd1461010d5780633b54ccc31461012f57806375a6dad714610142576100bc565b806306105d29146100c1578063244f53b5146100e3576100bc565b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc366004611075565b6101d6565b005b6100f66100f1366004610f7f565b61021d565b6040516101049291906112fc565b60405180910390f35b34801561011957600080fd5b50610122610315565b60405161010491906112f1565b6100f661013d366004610e93565b610335565b6100f6610150366004610ff2565b61049c565b34801561016157600080fd5b5061016a61073e565b6040516101049190611338565b34801561018357600080fd5b506100e1610192366004610f25565b610763565b3480156101a357600080fd5b5061016a6108a0565b3480156101b857600080fd5b5061016a6108a6565b3480156101cd57600080fd5b5061016a6108ca565b610217848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d092505050565b50505050565b600060603360405160200161023291906110e2565b6040516020818303038152906040528051906020012061025061073e565b146102765760405162461bcd60e51b815260040161026d9061166c565b60405180910390fd5b846001600160a01b03163485856040516102919291906111ab565b60006040518083038185875af1925050503d80600081146102ce576040519150601f19603f3d011682016040523d82523d6000602084013e6102d3565b606091505b509092509050471561030d5760405133904780156108fc02916000818181858888f1935050505015801561030b573d6000803e3d6000fd5b505b935093915050565b60008061032061073e565b141561032e57506000610332565b5060015b90565b60006060600060ff60f81b898b3389604051602001610356939291906110ff565b604051602081830303815290604052805190602001208a60405160200161037d91906111d7565b604051602081830303815290604052805190602001206040516020016103a6949392919061112d565b60408051601f19818403018152919052805160209091012090506001600160a01b03811630146103e85760405162461bcd60e51b815260040161026d906113c2565b6001600160a01b0387161561045b57866001600160a01b03163486866040516104129291906111ab565b60006040518083038185875af1925050503d806000811461044f576040519150601f19603f3d011682016040523d82523d6000602084013e610454565b606091505b5090935091505b471561048f5760405133904780156108fc02916000818181858888f1935050505015801561048d573d6000803e3d6000fd5b505b5097509795505050505050565b6000606085600001516001600160a01b0316336001600160a01b0316146104d55760405162461bcd60e51b815260040161026d90611467565b610516878786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d092505050565b610120860151158061052c575042866101200151115b6105485760405162461bcd60e51b815260040161026d906114e0565b60008054600101905560e08601511561065a5785606001516001600160a01b0316866101000151868860e001516040516024016105869291906112d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052516105d091906111bb565b60006040518083038160008787f1925050503d806000811461060e576040519150601f19603f3d011682016040523d82523d6000602084013e610613565b606091505b50909250905081801561063e57508051158061063e57508080602001905181019061063e9190610fd2565b61065a5760405162461bcd60e51b815260040161026d90611559565b8560a001515a1161067d5760405162461bcd60e51b815260040161026d906115fe565b85604001516001600160a01b03168660a0015187608001518861014001516040516106a891906111bb565b600060405180830381858888f193505050503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b50909250905047156107345760208601516040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610732573d6000803e3d6000fd5b505b9550959350505050565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5490565b600061076d61073e565b1461078a5760405162461bcd60e51b815260040161026d90611635565b610793856109bc565b81156108915760006060856001600160a01b03168386866040516024016107bb9291906112d8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1790525161080591906111bb565b60006040518083038160008787f1925050503d8060008114610843576040519150601f19603f3d011682016040523d82523d6000602084013e610848565b606091505b50915091508180156108725750805115806108725750808060200190518101906108729190610fd2565b61088e5760405162461bcd60e51b815260040161026d906115c7565b50505b610899610a0d565b5050505050565b60005481565b7fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a581565b60015481565b6020808301516040516108e392016110e2565b6040516020818303038152906040528051906020012061090161073e565b1461091e5760405162461bcd60e51b815260040161026d9061166c565b8160c00151600054146109435760405162461bcd60e51b815260040161026d90611430565b61099b610991826001546109578787610aaa565b805160209182012060405161096d939201611240565b60405160208183030381529060405280519060200120610b5790919063ffffffff16565b8360200151610ba2565b6109b75760405162461bcd60e51b815260040161026d90611590565b505050565b6000816040516020016109cf91906110e2565b60408051601f1981840301815291905280516020909101207fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a555050565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd41b7f69f4d7734774d21b5548d74704ad02f9f1545db63927a1d58479c576c87fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5610a78610bfd565b30604051602001610a8d959493929190611341565b60408051601f198184030181529190528051602090910120600155565b8051602080830151604080850151606086810151608088015160a089015160c08a015160e08b01516101008c01516101208d01516101408e01518051908d01209951979c7fdbc4f1d96529fadae86244f9c7b2dc871009d2ad633f32fb7833efcc2c0d53709c610b1f9c919b919a9901611276565b60408051601f1981840301815290829052610b3f9291869060200161117e565b60405160208183030381529060405290505b92915050565b60008151604114610b7a5760405162461bcd60e51b815260040161026d906113f9565b60208201516040830151606084015160001a610b9886828585610c01565b9695505050505050565b6000816001600160a01b0316836001600160a01b0316148015610be2575073dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b03841614155b8015610bf657506001600160a01b03831615155b9392505050565b4690565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610c435760405162461bcd60e51b815260040161026d9061149e565b8360ff16601b1480610c5857508360ff16601c145b610c745760405162461bcd60e51b815260040161026d90611517565b600060018686868660405160008152602001604052604051610c99949392919061136d565b6020604051602081039080840390855afa158015610cbb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cee5760405162461bcd60e51b815260040161026d9061138b565b95945050505050565b80356001600160a01b0381168114610b5157600080fd5b60008083601f840112610d1f578182fd5b50813567ffffffffffffffff811115610d36578182fd5b602083019150836020828501011115610d4e57600080fd5b9250929050565b600082601f830112610d65578081fd5b813567ffffffffffffffff811115610d7b578182fd5b610d8e601f8201601f19166020016116a1565b9150808252836020828501011115610da557600080fd5b8060208401602084013760009082016020015292915050565b6000610160808385031215610dd1578182fd5b610dda816116a1565b915050610de78383610cf7565b8152610df68360208401610cf7565b6020820152610e088360408401610cf7565b6040820152610e1a8360608401610cf7565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff811115610e7b57600080fd5b610e8785828601610d55565b82840152505092915050565b600080600080600080600060c0888a031215610ead578283fd5b610eb78989610cf7565b9650610ec68960208a01610cf7565b9550610ed58960408a01610cf7565b9450610ee48960608a01610cf7565b93506080880135925060a088013567ffffffffffffffff811115610f06578283fd5b610f128a828b01610d0e565b989b979a50959850939692959293505050565b600080600080600060a08688031215610f3c578081fd5b8535610f47816116f4565b94506020860135610f57816116f4565b93506040860135610f67816116f4565b94979396509394606081013594506080013592915050565b600080600060408486031215610f93578283fd5b8335610f9e816116f4565b9250602084013567ffffffffffffffff811115610fb9578283fd5b610fc586828701610d0e565b9497909650939450505050565b600060208284031215610fe3578081fd5b81518015158114610bf6578182fd5b600080600080600060808688031215611009578081fd5b85359450602086013567ffffffffffffffff80821115611027578283fd5b61103389838a01610dbe565b95506110428960408a01610cf7565b94506060880135915080821115611057578283fd5b5061106488828901610d0e565b969995985093965092949392505050565b6000806000806060858703121561108a578384fd5b84359350602085013567ffffffffffffffff808211156110a8578485fd5b6110b488838901610dbe565b945060408701359150808211156110c9578384fd5b506110d687828801610d0e565b95989497509550505050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b6bffffffffffffffffffffffff19606094851b811682529290931b9091166014830152602882015260480190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b600084825283516111968160208501602088016116c8565b60209201918201929092526040019392505050565b6000828483379101908152919050565b600082516111cd8184602087016116c8565b9190910192915050565b7f602d3d8160093d39f3363d3d373d3d3d3d363d73000000000000000000000000815260609190911b6bffffffffffffffffffffffff191660148201527f5af43d923d90803e602b57fd5bf3000000000000000000000000000000000000602882015260360190565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b039b8c168152998b1660208b0152978a1660408a0152959098166060880152608087019390935260a086019190915260c085015260e08401526101008301939093526101208201929092526101408101919091526101600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600083151582526040602083015282518060408401526113238160608501602087016116c8565b601f01601f1916919091016060019392505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526011908201527f496e76616c6964207265636f7665726572000000000000000000000000000000604082015260600190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b6020808252600e908201527f6e6f6e6365206d69736d61746368000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f496e76616c69642063616c6c6572000000000000000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526013908201527f53573a2072657175657374206578706972656400000000000000000000000000604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b60208082526017908201527f556e61626c6520746f2070617920666f722072656c6179000000000000000000604082015260600190565b60208082526012908201527f5369676e6174757265206d69736d617463680000000000000000000000000000604082015260600190565b6020808252601c908201527f556e61626c6520746f2070617920666f72206465706c6f796d656e7400000000604082015260600190565b60208082526013908201527f4e6f7420656e6f75676820676173206c65667400000000000000000000000000604082015260600190565b60208082526013908201527f416c726561647920696e697469616c697a656400000000000000000000000000604082015260600190565b6020808252818101527f4e6f7420746865206f776e6572206f662074686520536d61727457616c6c6574604082015260600190565b60405181810167ffffffffffffffff811182821017156116c057600080fd5b604052919050565b60005b838110156116e35781810151838201526020016116cb565b838111156102175750506000910152565b6001600160a01b038116811461170957600080fd5b5056fea264697066735822122060f175bc1a9f187ca8085dba138a13c269b43c027452ad963dbb5e6bdcd6315664736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
