{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestERC20Security",
  "sourceName": "contracts/soma/SecurityTokens/extensions/tests/TestERC20Security.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "BalanceChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "prevPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RequiredPrivilegesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Seized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PRIVILEGES",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_SEIZE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_UPDATE_PRIVILEGES_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_SEIZE_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_UPDATE_PRIVILEGES_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA",
      "outputs": [
        {
          "internalType": "contract ISOMA",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "canTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "fromBlock",
              "type": "uint32"
            },
            {
              "internalType": "uint224",
              "name": "balance",
              "type": "uint224"
            }
          ],
          "internalType": "struct ERC20HistoryUpgradeable.Checkpoint",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "domain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requiredPrivileges",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "seize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "newRequiredPrivileges",
          "type": "bytes32"
        }
      ],
      "name": "updateRequiredPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "validateTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf6080526001600160401b0360a05234801561003357600080fd5b5060805160a0516131f261009f600039600061031e0152600081816103bb0152818161071e01528181610911015281816109ad01528181610a9301528181610bf501528181610c9101528181610da00152818161137c015281816115000152611c1401526131f26000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636fcfff4511610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e14610518578063eb9253c01461052b578063eec47d601461053e578063f1127ed814610548578063f37d11cc1461058557600080fd5b8063a9059cbb146104b5578063ac9650d8146104c8578063c6946a12146104e8578063c72460ee146104fb578063d505accf1461050557600080fd5b80638e539e8c116100ff5780638e539e8c1461046157806391d148541461047457806395d89b4114610487578063a457c2d71461048f578063a6487c53146104a257600080fd5b80636fcfff45146103f557806370a082311461041d5780637ecebe00146104465780638456cb591461045957600080fd5b80632772ce9d116101be5780633950935111610182578063395093511461037e5780633f4ba83a146103915780634b63885a1461039b5780635c975abb146103ae57806363727fc2146103b657600080fd5b80632772ce9d146103065780632a7a0c68146103195780633013928014610340578063313ce567146103675780633644e5151461037657600080fd5b806318160ddd1161020557806318160ddd146102a85780631e26571f146102b0578063227102a6146102b957806323b872dd146102e0578063248a9ca3146102f357600080fd5b806301ffc9a71461023757806306fdde031461025f578063095ea7b3146102745780630df8699914610287575b600080fd5b61024a610245366004612a38565b610598565b60405190151581526020015b60405180910390f35b6102676105f9565b6040516102569190612ab2565b61024a610282366004612ada565b61068b565b61029a610295366004612ada565b6106a3565b604051908152602001610256565b60355461029a565b61025e5461029a565b61029a7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b61024a6102ee366004612b06565b6106f6565b61029a610301366004612b47565b61071a565b61024a610314366004612b47565b61080c565b61029a7f000000000000000000000000000000000000000000000000000000000000000081565b61029a7fca36d5a0569842341b54d50138a85347289de5969cb525e882bbb1a2dedcfef981565b60405160128152602001610256565b61029a6108cf565b61024a61038c366004612ada565b6108de565b610399610900565b005b61024a6103a9366004612b60565b610a8f565b61024a610b99565b6103dd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610256565b610408610403366004612b60565b610ba3565b60405163ffffffff9091168152602001610256565b61029a61042b366004612b60565b6001600160a01b031660009081526033602052604090205490565b61029a610454366004612b60565b610bc5565b610399610be4565b61029a61046f366004612b47565b610d70565b61024a610482366004612b7d565b610d9c565b610267610e93565b61024a61049d366004612ada565b610ea2565b6103996104b0366004612c50565b610f1d565b61024a6104c3366004612ada565b611034565b6104db6104d6366004612cd8565b611042565b6040516102569190612d4d565b6103996104f6366004612b06565b611137565b61029a6102295481565b610399610513366004612daf565b611147565b61029a610526366004612e26565b6112ab565b610399610539366004612ada565b6112d6565b61029a61025d5481565b61055b610556366004612e54565b611477565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610256565b61024a610593366004612b06565b6114fb565b60006001600160e01b031982166336372b0760e01b14806105c957506001600160e01b03198216634ec7fbed60e11b145b806105e457506001600160e01b031982166383abf71560e01b145b806105f357506105f3826116a5565b92915050565b60606036805461060890612e8b565b80601f016020809104026020016040519081016040528092919081815260200182805461063490612e8b565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905090565b6000336106998185856116ca565b5060019392505050565b60004382106106cd5760405162461bcd60e51b81526004016106c490612ebf565b60405180910390fd5b6001600160a01b038316600090815260c9602052604090206106ef90836117ee565b9392505050565b6000336107048582856118ab565b61070f85858561191f565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e9190612f00565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b81526004016107cb91815260200190565b602060405180830381865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612f1d565b600061081c61025d546104823390565b8061084c575061084c7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb133610d9c565b6108be5760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f2074686973000000000000000060648201526084016106c4565b6108c782611afe565b506001919050565b60006108d9611b43565b905090565b6000336106998185856108f183836112ab565b6108fb9190612f4c565b6116ca565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109919190612f00565b6001600160a01b03161480610a385750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190612f00565b6001600160a01b0316145b610a845760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106c4565b610a8c611bbe565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b139190612f00565b6001600160a01b031663253bd7b783610b2c61025e5490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612f5f565b60006108d9611c10565b6001600160a01b038116600090815260c960205260408120546105f390611ca4565b6001600160a01b038116600090815261012e60205260408120546105f3565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c759190612f00565b6001600160a01b03161480610d1c5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190612f00565b6001600160a01b0316145b610d685760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106c4565b610a8c611d0d565b6000438210610d915760405162461bcd60e51b81526004016106c490612ebf565b6105f360ca836117ee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e209190612f00565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef9190612f5f565b60606037805461060890612e8b565b60003381610eb082866112ab565b905083811015610f105760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106c4565b61070f82868684036116ca565b600054610100900460ff1615808015610f3d5750600054600160ff909116105b80610f575750303b158015610f57575060005460ff166001145b610fba5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106c4565b6000805460ff191660011790558015610fdd576000805461ff0019166101001790555b610fe8848484611d4a565b801561102e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60003361069981858561191f565b60608167ffffffffffffffff81111561105d5761105d612bad565b60405190808252806020026020018201604052801561109057816020015b606081526020019060019003908161107b5790505b50905060005b8281101561113057611100308585848181106110b4576110b4612f81565b90506020028101906110c69190612f97565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dff92505050565b82828151811061111257611112612f81565b6020026020010181905250808061112890612fe5565b915050611096565b5092915050565b611142838383611ef3565b505050565b834211156111975760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106c4565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111c68c611efe565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061122182611f27565b9050600061123182878787611f75565b9050896001600160a01b0316816001600160a01b0316146112945760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106c4565b61129f8a8a8a6116ca565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61022a805460ff1916600117905560006112ed3390565b90506112fc6102295482610d9c565b8061132c575061132c7fca36d5a0569842341b54d50138a85347289de5969cb525e882bbb1a2dedcfef982610d9c565b6113785760405162461bcd60e51b815260206004820152601e60248201527f5365697a61626c6553656375726974793a20554e415554484f52495a4544000060448201526064016106c4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff0d1a606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc9190612f00565b9050611409848285611f9d565b806001600160a01b0316846001600160a01b03166114243390565b6001600160a01b03167fa9aec5d8b86e2fa2fd6ac3af62f2622e3dfdab1967d4cbbb56a5df7d74cb887c8660405161145e91815260200190565b60405180910390a4505061022a805460ff191690555050565b60408051808201909152600080825260208201526001600160a01b038316600090815260c960205260409020805463ffffffff84169081106114bb576114bb612f81565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190612f00565b9050600061158e61025e5490565b90506001600160a01b0386161580611612575060405163253bd7b760e01b81526001600160a01b0387811660048301526024820183905283169063253bd7b790604401602060405180830381865afa1580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190612f5f565b801561169b57506001600160a01b038516158061169b575060405163253bd7b760e01b81526001600160a01b0386811660048301526024820183905283169063253bd7b790604401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190612f5f565b9695505050505050565b60006001600160e01b03198216633cdf447360e21b14806105f357506105f382611fa8565b6001600160a01b03831661172c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c4565b6001600160a01b03821661178d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c4565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b8154600090815b818110156118525760006118098284611fcd565b90508486828154811061181e5761181e612f81565b60009182526020909120015463ffffffff16111561183e5780925061184c565b611849816001612f4c565b91505b506117f5565b81156118965784611864600184612ffe565b8154811061187457611874612f81565b60009182526020909120015464010000000090046001600160e01b0316611899565b60005b6001600160e01b031695945050505050565b60006118b784846112ab565b9050600019811461102e57818110156119125760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106c4565b61102e84848484036116ca565b6001600160a01b0383166119835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106c4565b6001600160a01b0382166119e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106c4565b6119f0838383611ef3565b6001600160a01b03831660009081526033602052604090205481811015611a685760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106c4565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290611a9f908490612f4c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611aeb91815260200190565b60405180910390a361102e848484611fe8565b61025e54604080519182526020820183905233917f53f0b6b34c97fd1733ccb4b21aea7549d7ad3a83e6316864417b8cc1a9a9a807910160405180910390a261025e55565b60006108d97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b7260fa5490565b60fb546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b611bc6611ff3565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190612f5f565b806108d957505060655460ff1690565b600063ffffffff821115611d095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106c4565b5090565b611d15612040565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bf33390565b600054610100900460ff16611d715760405162461bcd60e51b81526004016106c490613011565b611d79612088565b611d81612088565b611d896120af565b611d91612088565b611db483604051806040016040528060018152602001603160f81b8152506120e2565b611dbd83612123565b611dc5612088565b611dcd61214a565b611dd5612088565b611ddd612088565b611de5612088565b611ded6121d3565b611df5612088565b6111428282612265565b60606001600160a01b0383163b611e675760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106c4565b600080846001600160a01b031684604051611e82919061305c565b600060405180830381855af49150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b5091509150611eea82826040518060600160405280602781526020016131bf602791396122a5565b95945050505050565b6111428383836122de565b6001600160a01b038116600090815261012e602052604090208054600181018255905b50919050565b60006105f3611f34611b43565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f8687878787612352565b91509150611f938161243f565b5095945050505050565b61114283838361191f565b60006001600160e01b03198216630e46e23b60e31b14806105f357506105f3826125f5565b6000611fdc6002848418613078565b6106ef90848416612f4c565b61114283838361261a565b611ffb610b99565b61203e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106c4565b565b612048610b99565b1561203e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106c4565b600054610100900460ff1661203e5760405162461bcd60e51b81526004016106c490613011565b600054610100900460ff166120d65760405162461bcd60e51b81526004016106c490613011565b6065805460ff19169055565b600054610100900460ff166121095760405162461bcd60e51b81526004016106c490613011565b81516020928301208151919092012060fa9190915560fb55565b600054610100900460ff16610a8c5760405162461bcd60e51b81526004016106c490613011565b600054610100900460ff166121715760405162461bcd60e51b81526004016106c490613011565b6040516bffffffffffffffffffffffff193060601b1660208201527fca36d5a0569842341b54d50138a85347289de5969cb525e882bbb1a2dedcfef9603482015260540160408051601f19818403018152919052805160209091012061022955565b600054610100900460ff166121fa5760405162461bcd60e51b81526004016106c490613011565b6040516bffffffffffffffffffffffff193060601b1660208201527ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb1603482015260540160408051601f19818403018152919052805160209091012061025d5561203e600019611afe565b600054610100900460ff1661228c5760405162461bcd60e51b81526004016106c490613011565b603661229883826130e8565b50603761114282826130e8565b606083156122b45750816106ef565b8251156122c45782518084602001fd5b8160405162461bcd60e51b81526004016106c49190612ab2565b6122e9838383612625565b6122f161268d565b156122fb57505050565b6123068383836114fb565b6111425760405162461bcd60e51b815260206004820152601e60248201527f455243323047756172643a204d495353494e475f50524956494c45474553000060448201526064016106c4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123895750600090506003612436565b8460ff16601b141580156123a157508460ff16601c14155b156123b25750600090506004612436565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612406573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661242f57600060019250925050612436565b9150600090505b94509492505050565b6000816004811115612453576124536131a8565b0361245b5750565b600181600481111561246f5761246f6131a8565b036124bc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106c4565b60028160048111156124d0576124d06131a8565b0361251d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106c4565b6003816004811115612531576125316131a8565b036125895760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106c4565b600481600481111561259d5761259d6131a8565b03610a8c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106c4565b60006001600160e01b031982166303ae494f60e61b14806105f357506105f3826126a7565b6111428383836126cc565b61262d610b99565b156111425760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b60648201526084016106c4565b61022a5460009060ff166126a15750600090565b50600190565b60006001600160e01b0319821663b55bd4f760e01b14806105f357506105f382612809565b816001600160a01b0316836001600160a01b0316141580156126ee5750600081115b15611142576001600160a01b0383161561277c576001600160a01b038316600090815260c96020526040812081906127299061283e8561284a565b91509150846001600160a01b03167faeeb0cb16f299136e7e5467ea84217150fe83008833064528f360cde7b7b54c38383604051612771929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611142576001600160a01b038216600090815260c96020526040812081906127b2906129c38561284a565b91509150836001600160a01b03167faeeb0cb16f299136e7e5467ea84217150fe83008833064528f360cde7b7b54c383836040516127fa929190918252602082015260400190565b60405180910390a25050505050565b60006001600160e01b0319821663d86f1ca160e01b14806105f357506301ffc9a760e01b6001600160e01b03198316146105f3565b60006106ef8284612ffe565b8254600090819080156128955785612863600183612ffe565b8154811061287357612873612f81565b60009182526020909120015464010000000090046001600160e01b0316612898565b60005b6001600160e01b031692506128b183858763ffffffff16565b91506000811180156128ef575043866128cb600184612ffe565b815481106128db576128db612f81565b60009182526020909120015463ffffffff16145b1561294f576128fd826129cf565b86612909600184612ffe565b8154811061291957612919612f81565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506129ba565b85604051806040016040528061296443611ca4565b63ffffffff168152602001612978856129cf565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006106ef8284612f4c565b60006001600160e01b03821115611d095760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106c4565b600060208284031215612a4a57600080fd5b81356001600160e01b0319811681146106ef57600080fd5b60005b83811015612a7d578181015183820152602001612a65565b50506000910152565b60008151808452612a9e816020860160208601612a62565b601f01601f19169290920160200192915050565b6020815260006106ef6020830184612a86565b6001600160a01b0381168114610a8c57600080fd5b60008060408385031215612aed57600080fd5b8235612af881612ac5565b946020939093013593505050565b600080600060608486031215612b1b57600080fd5b8335612b2681612ac5565b92506020840135612b3681612ac5565b929592945050506040919091013590565b600060208284031215612b5957600080fd5b5035919050565b600060208284031215612b7257600080fd5b81356106ef81612ac5565b60008060408385031215612b9057600080fd5b823591506020830135612ba281612ac5565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612bd457600080fd5b813567ffffffffffffffff80821115612bef57612bef612bad565b604051601f8301601f19908116603f01168101908282118183101715612c1757612c17612bad565b81604052838152866020858801011115612c3057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612c6557600080fd5b833567ffffffffffffffff80821115612c7d57600080fd5b612c8987838801612bc3565b94506020860135915080821115612c9f57600080fd5b612cab87838801612bc3565b93506040860135915080821115612cc157600080fd5b50612cce86828701612bc3565b9150509250925092565b60008060208385031215612ceb57600080fd5b823567ffffffffffffffff80821115612d0357600080fd5b818501915085601f830112612d1757600080fd5b813581811115612d2657600080fd5b8660208260051b8501011115612d3b57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612da257603f19888603018452612d90858351612a86565b94509285019290850190600101612d74565b5092979650505050505050565b600080600080600080600060e0888a031215612dca57600080fd5b8735612dd581612ac5565b96506020880135612de581612ac5565b95506040880135945060608801359350608088013560ff81168114612e0957600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612e3957600080fd5b8235612e4481612ac5565b91506020830135612ba281612ac5565b60008060408385031215612e6757600080fd5b8235612e7281612ac5565b9150602083013563ffffffff81168114612ba257600080fd5b600181811c90821680612e9f57607f821691505b602082108103611f2157634e487b7160e01b600052602260045260246000fd5b60208082526021908201527f4552433230486973746f72793a20626c6f636b206e6f7420796574206d696e656040820152601960fa1b606082015260800190565b600060208284031215612f1257600080fd5b81516106ef81612ac5565b600060208284031215612f2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f3576105f3612f36565b600060208284031215612f7157600080fd5b815180151581146106ef57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612fae57600080fd5b83018035915067ffffffffffffffff821115612fc957600080fd5b602001915036819003821315612fde57600080fd5b9250929050565b600060018201612ff757612ff7612f36565b5060010190565b818103818111156105f3576105f3612f36565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000825161306e818460208701612a62565b9190910192915050565b60008261309557634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561114257600081815260208120601f850160051c810160208610156130c15750805b601f850160051c820191505b818110156130e0578281556001016130cd565b505050505050565b815167ffffffffffffffff81111561310257613102612bad565b613116816131108454612e8b565b8461309a565b602080601f83116001811461314b57600084156131335750858301515b600019600386901b1c1916600185901b1785556130e0565b600085815260208120601f198616915b8281101561317a5788860151825594840194600190910190840161315b565b50858210156131985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636fcfff4511610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e14610518578063eb9253c01461052b578063eec47d601461053e578063f1127ed814610548578063f37d11cc1461058557600080fd5b8063a9059cbb146104b5578063ac9650d8146104c8578063c6946a12146104e8578063c72460ee146104fb578063d505accf1461050557600080fd5b80638e539e8c116100ff5780638e539e8c1461046157806391d148541461047457806395d89b4114610487578063a457c2d71461048f578063a6487c53146104a257600080fd5b80636fcfff45146103f557806370a082311461041d5780637ecebe00146104465780638456cb591461045957600080fd5b80632772ce9d116101be5780633950935111610182578063395093511461037e5780633f4ba83a146103915780634b63885a1461039b5780635c975abb146103ae57806363727fc2146103b657600080fd5b80632772ce9d146103065780632a7a0c68146103195780633013928014610340578063313ce567146103675780633644e5151461037657600080fd5b806318160ddd1161020557806318160ddd146102a85780631e26571f146102b0578063227102a6146102b957806323b872dd146102e0578063248a9ca3146102f357600080fd5b806301ffc9a71461023757806306fdde031461025f578063095ea7b3146102745780630df8699914610287575b600080fd5b61024a610245366004612a38565b610598565b60405190151581526020015b60405180910390f35b6102676105f9565b6040516102569190612ab2565b61024a610282366004612ada565b61068b565b61029a610295366004612ada565b6106a3565b604051908152602001610256565b60355461029a565b61025e5461029a565b61029a7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b61024a6102ee366004612b06565b6106f6565b61029a610301366004612b47565b61071a565b61024a610314366004612b47565b61080c565b61029a7f000000000000000000000000000000000000000000000000000000000000000081565b61029a7fca36d5a0569842341b54d50138a85347289de5969cb525e882bbb1a2dedcfef981565b60405160128152602001610256565b61029a6108cf565b61024a61038c366004612ada565b6108de565b610399610900565b005b61024a6103a9366004612b60565b610a8f565b61024a610b99565b6103dd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610256565b610408610403366004612b60565b610ba3565b60405163ffffffff9091168152602001610256565b61029a61042b366004612b60565b6001600160a01b031660009081526033602052604090205490565b61029a610454366004612b60565b610bc5565b610399610be4565b61029a61046f366004612b47565b610d70565b61024a610482366004612b7d565b610d9c565b610267610e93565b61024a61049d366004612ada565b610ea2565b6103996104b0366004612c50565b610f1d565b61024a6104c3366004612ada565b611034565b6104db6104d6366004612cd8565b611042565b6040516102569190612d4d565b6103996104f6366004612b06565b611137565b61029a6102295481565b610399610513366004612daf565b611147565b61029a610526366004612e26565b6112ab565b610399610539366004612ada565b6112d6565b61029a61025d5481565b61055b610556366004612e54565b611477565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610256565b61024a610593366004612b06565b6114fb565b60006001600160e01b031982166336372b0760e01b14806105c957506001600160e01b03198216634ec7fbed60e11b145b806105e457506001600160e01b031982166383abf71560e01b145b806105f357506105f3826116a5565b92915050565b60606036805461060890612e8b565b80601f016020809104026020016040519081016040528092919081815260200182805461063490612e8b565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905090565b6000336106998185856116ca565b5060019392505050565b60004382106106cd5760405162461bcd60e51b81526004016106c490612ebf565b60405180910390fd5b6001600160a01b038316600090815260c9602052604090206106ef90836117ee565b9392505050565b6000336107048582856118ab565b61070f85858561191f565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e9190612f00565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b81526004016107cb91815260200190565b602060405180830381865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612f1d565b600061081c61025d546104823390565b8061084c575061084c7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb133610d9c565b6108be5760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f2074686973000000000000000060648201526084016106c4565b6108c782611afe565b506001919050565b60006108d9611b43565b905090565b6000336106998185856108f183836112ab565b6108fb9190612f4c565b6116ca565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109919190612f00565b6001600160a01b03161480610a385750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190612f00565b6001600160a01b0316145b610a845760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106c4565b610a8c611bbe565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b139190612f00565b6001600160a01b031663253bd7b783610b2c61025e5490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612f5f565b60006108d9611c10565b6001600160a01b038116600090815260c960205260408120546105f390611ca4565b6001600160a01b038116600090815261012e60205260408120546105f3565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c759190612f00565b6001600160a01b03161480610d1c5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190612f00565b6001600160a01b0316145b610d685760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106c4565b610a8c611d0d565b6000438210610d915760405162461bcd60e51b81526004016106c490612ebf565b6105f360ca836117ee565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e209190612f00565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef9190612f5f565b60606037805461060890612e8b565b60003381610eb082866112ab565b905083811015610f105760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106c4565b61070f82868684036116ca565b600054610100900460ff1615808015610f3d5750600054600160ff909116105b80610f575750303b158015610f57575060005460ff166001145b610fba5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106c4565b6000805460ff191660011790558015610fdd576000805461ff0019166101001790555b610fe8848484611d4a565b801561102e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60003361069981858561191f565b60608167ffffffffffffffff81111561105d5761105d612bad565b60405190808252806020026020018201604052801561109057816020015b606081526020019060019003908161107b5790505b50905060005b8281101561113057611100308585848181106110b4576110b4612f81565b90506020028101906110c69190612f97565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dff92505050565b82828151811061111257611112612f81565b6020026020010181905250808061112890612fe5565b915050611096565b5092915050565b611142838383611ef3565b505050565b834211156111975760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106c4565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111c68c611efe565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061122182611f27565b9050600061123182878787611f75565b9050896001600160a01b0316816001600160a01b0316146112945760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106c4565b61129f8a8a8a6116ca565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61022a805460ff1916600117905560006112ed3390565b90506112fc6102295482610d9c565b8061132c575061132c7fca36d5a0569842341b54d50138a85347289de5969cb525e882bbb1a2dedcfef982610d9c565b6113785760405162461bcd60e51b815260206004820152601e60248201527f5365697a61626c6553656375726974793a20554e415554484f52495a4544000060448201526064016106c4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff0d1a606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc9190612f00565b9050611409848285611f9d565b806001600160a01b0316846001600160a01b03166114243390565b6001600160a01b03167fa9aec5d8b86e2fa2fd6ac3af62f2622e3dfdab1967d4cbbb56a5df7d74cb887c8660405161145e91815260200190565b60405180910390a4505061022a805460ff191690555050565b60408051808201909152600080825260208201526001600160a01b038316600090815260c960205260409020805463ffffffff84169081106114bb576114bb612f81565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190612f00565b9050600061158e61025e5490565b90506001600160a01b0386161580611612575060405163253bd7b760e01b81526001600160a01b0387811660048301526024820183905283169063253bd7b790604401602060405180830381865afa1580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190612f5f565b801561169b57506001600160a01b038516158061169b575060405163253bd7b760e01b81526001600160a01b0386811660048301526024820183905283169063253bd7b790604401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b9190612f5f565b9695505050505050565b60006001600160e01b03198216633cdf447360e21b14806105f357506105f382611fa8565b6001600160a01b03831661172c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c4565b6001600160a01b03821661178d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c4565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b8154600090815b818110156118525760006118098284611fcd565b90508486828154811061181e5761181e612f81565b60009182526020909120015463ffffffff16111561183e5780925061184c565b611849816001612f4c565b91505b506117f5565b81156118965784611864600184612ffe565b8154811061187457611874612f81565b60009182526020909120015464010000000090046001600160e01b0316611899565b60005b6001600160e01b031695945050505050565b60006118b784846112ab565b9050600019811461102e57818110156119125760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106c4565b61102e84848484036116ca565b6001600160a01b0383166119835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106c4565b6001600160a01b0382166119e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106c4565b6119f0838383611ef3565b6001600160a01b03831660009081526033602052604090205481811015611a685760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106c4565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290611a9f908490612f4c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611aeb91815260200190565b60405180910390a361102e848484611fe8565b61025e54604080519182526020820183905233917f53f0b6b34c97fd1733ccb4b21aea7549d7ad3a83e6316864417b8cc1a9a9a807910160405180910390a261025e55565b60006108d97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b7260fa5490565b60fb546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b611bc6611ff3565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190612f5f565b806108d957505060655460ff1690565b600063ffffffff821115611d095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106c4565b5090565b611d15612040565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bf33390565b600054610100900460ff16611d715760405162461bcd60e51b81526004016106c490613011565b611d79612088565b611d81612088565b611d896120af565b611d91612088565b611db483604051806040016040528060018152602001603160f81b8152506120e2565b611dbd83612123565b611dc5612088565b611dcd61214a565b611dd5612088565b611ddd612088565b611de5612088565b611ded6121d3565b611df5612088565b6111428282612265565b60606001600160a01b0383163b611e675760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106c4565b600080846001600160a01b031684604051611e82919061305c565b600060405180830381855af49150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b5091509150611eea82826040518060600160405280602781526020016131bf602791396122a5565b95945050505050565b6111428383836122de565b6001600160a01b038116600090815261012e602052604090208054600181018255905b50919050565b60006105f3611f34611b43565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f8687878787612352565b91509150611f938161243f565b5095945050505050565b61114283838361191f565b60006001600160e01b03198216630e46e23b60e31b14806105f357506105f3826125f5565b6000611fdc6002848418613078565b6106ef90848416612f4c565b61114283838361261a565b611ffb610b99565b61203e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106c4565b565b612048610b99565b1561203e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106c4565b600054610100900460ff1661203e5760405162461bcd60e51b81526004016106c490613011565b600054610100900460ff166120d65760405162461bcd60e51b81526004016106c490613011565b6065805460ff19169055565b600054610100900460ff166121095760405162461bcd60e51b81526004016106c490613011565b81516020928301208151919092012060fa9190915560fb55565b600054610100900460ff16610a8c5760405162461bcd60e51b81526004016106c490613011565b600054610100900460ff166121715760405162461bcd60e51b81526004016106c490613011565b6040516bffffffffffffffffffffffff193060601b1660208201527fca36d5a0569842341b54d50138a85347289de5969cb525e882bbb1a2dedcfef9603482015260540160408051601f19818403018152919052805160209091012061022955565b600054610100900460ff166121fa5760405162461bcd60e51b81526004016106c490613011565b6040516bffffffffffffffffffffffff193060601b1660208201527ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb1603482015260540160408051601f19818403018152919052805160209091012061025d5561203e600019611afe565b600054610100900460ff1661228c5760405162461bcd60e51b81526004016106c490613011565b603661229883826130e8565b50603761114282826130e8565b606083156122b45750816106ef565b8251156122c45782518084602001fd5b8160405162461bcd60e51b81526004016106c49190612ab2565b6122e9838383612625565b6122f161268d565b156122fb57505050565b6123068383836114fb565b6111425760405162461bcd60e51b815260206004820152601e60248201527f455243323047756172643a204d495353494e475f50524956494c45474553000060448201526064016106c4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156123895750600090506003612436565b8460ff16601b141580156123a157508460ff16601c14155b156123b25750600090506004612436565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612406573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661242f57600060019250925050612436565b9150600090505b94509492505050565b6000816004811115612453576124536131a8565b0361245b5750565b600181600481111561246f5761246f6131a8565b036124bc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106c4565b60028160048111156124d0576124d06131a8565b0361251d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106c4565b6003816004811115612531576125316131a8565b036125895760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106c4565b600481600481111561259d5761259d6131a8565b03610a8c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106c4565b60006001600160e01b031982166303ae494f60e61b14806105f357506105f3826126a7565b6111428383836126cc565b61262d610b99565b156111425760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b60648201526084016106c4565b61022a5460009060ff166126a15750600090565b50600190565b60006001600160e01b0319821663b55bd4f760e01b14806105f357506105f382612809565b816001600160a01b0316836001600160a01b0316141580156126ee5750600081115b15611142576001600160a01b0383161561277c576001600160a01b038316600090815260c96020526040812081906127299061283e8561284a565b91509150846001600160a01b03167faeeb0cb16f299136e7e5467ea84217150fe83008833064528f360cde7b7b54c38383604051612771929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611142576001600160a01b038216600090815260c96020526040812081906127b2906129c38561284a565b91509150836001600160a01b03167faeeb0cb16f299136e7e5467ea84217150fe83008833064528f360cde7b7b54c383836040516127fa929190918252602082015260400190565b60405180910390a25050505050565b60006001600160e01b0319821663d86f1ca160e01b14806105f357506301ffc9a760e01b6001600160e01b03198316146105f3565b60006106ef8284612ffe565b8254600090819080156128955785612863600183612ffe565b8154811061287357612873612f81565b60009182526020909120015464010000000090046001600160e01b0316612898565b60005b6001600160e01b031692506128b183858763ffffffff16565b91506000811180156128ef575043866128cb600184612ffe565b815481106128db576128db612f81565b60009182526020909120015463ffffffff16145b1561294f576128fd826129cf565b86612909600184612ffe565b8154811061291957612919612f81565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506129ba565b85604051806040016040528061296443611ca4565b63ffffffff168152602001612978856129cf565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b60006106ef8284612f4c565b60006001600160e01b03821115611d095760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106c4565b600060208284031215612a4a57600080fd5b81356001600160e01b0319811681146106ef57600080fd5b60005b83811015612a7d578181015183820152602001612a65565b50506000910152565b60008151808452612a9e816020860160208601612a62565b601f01601f19169290920160200192915050565b6020815260006106ef6020830184612a86565b6001600160a01b0381168114610a8c57600080fd5b60008060408385031215612aed57600080fd5b8235612af881612ac5565b946020939093013593505050565b600080600060608486031215612b1b57600080fd5b8335612b2681612ac5565b92506020840135612b3681612ac5565b929592945050506040919091013590565b600060208284031215612b5957600080fd5b5035919050565b600060208284031215612b7257600080fd5b81356106ef81612ac5565b60008060408385031215612b9057600080fd5b823591506020830135612ba281612ac5565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612bd457600080fd5b813567ffffffffffffffff80821115612bef57612bef612bad565b604051601f8301601f19908116603f01168101908282118183101715612c1757612c17612bad565b81604052838152866020858801011115612c3057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612c6557600080fd5b833567ffffffffffffffff80821115612c7d57600080fd5b612c8987838801612bc3565b94506020860135915080821115612c9f57600080fd5b612cab87838801612bc3565b93506040860135915080821115612cc157600080fd5b50612cce86828701612bc3565b9150509250925092565b60008060208385031215612ceb57600080fd5b823567ffffffffffffffff80821115612d0357600080fd5b818501915085601f830112612d1757600080fd5b813581811115612d2657600080fd5b8660208260051b8501011115612d3b57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612da257603f19888603018452612d90858351612a86565b94509285019290850190600101612d74565b5092979650505050505050565b600080600080600080600060e0888a031215612dca57600080fd5b8735612dd581612ac5565b96506020880135612de581612ac5565b95506040880135945060608801359350608088013560ff81168114612e0957600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612e3957600080fd5b8235612e4481612ac5565b91506020830135612ba281612ac5565b60008060408385031215612e6757600080fd5b8235612e7281612ac5565b9150602083013563ffffffff81168114612ba257600080fd5b600181811c90821680612e9f57607f821691505b602082108103611f2157634e487b7160e01b600052602260045260246000fd5b60208082526021908201527f4552433230486973746f72793a20626c6f636b206e6f7420796574206d696e656040820152601960fa1b606082015260800190565b600060208284031215612f1257600080fd5b81516106ef81612ac5565b600060208284031215612f2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f3576105f3612f36565b600060208284031215612f7157600080fd5b815180151581146106ef57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612fae57600080fd5b83018035915067ffffffffffffffff821115612fc957600080fd5b602001915036819003821315612fde57600080fd5b9250929050565b600060018201612ff757612ff7612f36565b5060010190565b818103818111156105f3576105f3612f36565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000825161306e818460208701612a62565b9190910192915050565b60008261309557634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561114257600081815260208120601f850160051c810160208610156130c15750805b601f850160051c820191505b818110156130e0578281556001016130cd565b505050505050565b815167ffffffffffffffff81111561310257613102612bad565b613116816131108454612e8b565b8461309a565b602080601f83116001811461314b57600084156131335750858301515b600019600386901b1c1916600185901b1785556130e0565b600085815260208120601f198616915b8281101561317a5788860151825594840194600190910190840161315b565b50858210156131985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
