{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestERC20Partition",
  "sourceName": "contracts/soma/SecurityTokens/extensions/tests/TestERC20Partition.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": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ApprovalPartition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "DeprecatePartition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "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": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "fromId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "toId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "TransferPartition",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PARTITION",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "spender",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "deprecated",
      "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": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "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": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "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": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611dcf806100206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806357cb1673116100b8578063b524abcf1161007c578063b524abcf146102ea578063ba497d081461030a578063c3f9213c1461032d578063dd62ed3e14610335578063de26648a14610348578063e92c59f31461035b57600080fd5b806357cb16731461028057806370a082311461029357806395d89b41146102bc578063a457c2d7146102c4578063a9059cbb146102d757600080fd5b806323b872dd1161010a57806323b872dd146101ed57806328972b1514610200578063313ce5671461021357806339509351146102225780634cd88b76146102355780634d30b6be1461024a57600080fd5b806306fdde0314610147578063095ea7b31461016557806310fe82941461018857806318160ddd1461019b5780631c8d5d38146101ad575b600080fd5b61014f61036e565b60405161015c9190611816565b60405180910390f35b610178610173366004611845565b610400565b604051901515815260200161015c565b610178610196366004611912565b61041a565b6035545b60405190815260200161015c565b61019f6101bb366004611973565b6001600160a01b0392831660009081526069602090815260408083209490951682529283528381209181529152205490565b6101786101fb366004611973565b610436565b61017861020e3660046119af565b61045a565b6040516012815260200161015c565b610178610230366004611845565b610485565b610248610243366004611a21565b6104a7565b005b61019f610258366004611845565b6001600160a01b03919091166000908152606860209081526040808320938352929052205490565b61017861028e366004611912565b6105c1565b61019f6102a1366004611a85565b6001600160a01b031660009081526033602052604090205490565b61014f6105d2565b6101786102d2366004611845565b6105e1565b6101786102e5366004611845565b61065c565b61019f6102f8366004611aa0565b60009081526066602052604090205490565b610178610318366004611aa0565b60009081526067602052604090205460ff1690565b61019f600081565b61019f610343366004611ab9565b61066a565b610248610356366004611912565b610695565b610248610369366004611912565b6106a7565b60606036805461037d90611aec565b80601f01602080910402602001604051908101604052809291908181526020018280546103a990611aec565b80156103f65780601f106103cb576101008083540402835291602001916103f6565b820191906000526020600020905b8154815290600101906020018083116103d957829003601f168201915b5050505050905090565b60003361040e8185856106b3565b60019150505b92915050565b60003361042a81878787876107d7565b50600195945050505050565b600033610444858285610925565b61044f858585610999565b506001949350505050565b60003361046a8782878787610b7f565b610478878787888888610c00565b5060019695505050505050565b60003361040e818585610498838361066a565b6104a29190611b3c565b6106b3565b600054610100900460ff16158080156104c75750600054600160ff909116105b806104e15750303b1580156104e1575060005460ff166001145b6105495760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561056c576000805461ff0019166101001790555b6105768383610c8e565b80156105bc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60003361042a818787808888610c00565b60606037805461037d90611aec565b600033816105ef828661066a565b90508381101561064f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610540565b61044f82868684036106b3565b60003361040e818585610999565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6106a184848484610cc3565b50505050565b6106a184848484610e19565b6001600160a01b0383166107155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610540565b6001600160a01b0382166107765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610540565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0385166108435760405162461bcd60e51b815260206004820152602d60248201527f4552433230506172746974696f6e3a20617070726f76652066726f6d2074686560448201526c207a65726f206164647265737360981b6064820152608401610540565b6001600160a01b0384166108ad5760405162461bcd60e51b815260206004820152602b60248201527f4552433230506172746974696f6e3a20617070726f766520746f20746865207a60448201526a65726f206164647265737360a81b6064820152608401610540565b6001600160a01b0380861660008181526069602090815260408083209489168084529482528083208884529091529081902085905551859291907fc7c99c94b6f2aa290d29935e03ed0355e55c0f0d30602ed539bc5dba9d8a1b16906109169087908790611b4f565b60405180910390a45050505050565b6000610931848461066a565b905060001981146106a1578181101561098c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610540565b6106a184848484036106b3565b6001600160a01b0383166109bf5760405162461bcd60e51b815260040161054090611b70565b6001600160a01b0382166109e55760405162461bcd60e51b815260040161054090611bbe565b6001600160a01b03831660009081526065602090815260408083206068835281842084805290925282205490918391908115610a5157610a258284610ffe565b9050610a4b87876000801b6000801b868660405180602001604052806000815250611016565b80830392505b8215610b6b576000610a62856111fb565b905060005b81811015610b00576000610a7b8783611205565b6001600160a01b038b1660009081526068602090815260408083208484529091528120549650909150859003610ab15750610a67565b610abb8587610ffe565b93508386039550610ae08a8a8384898960405180602001604052806000815250611016565b838503610af35760001990920191610afa565b6001909101905b50610a67565b60008511610b685760405162461bcd60e51b815260206004820152602f60248201527f4552433230506172746974696f6e3a207472616e7366657220616d6f756e742060448201526e657863656564732062616c616e636560881b6064820152608401610540565b50505b610b76878787611211565b50505050505050565b6001600160a01b03858116600090815260696020908152604080832093881683529281528282208683529052205460018101610bbb5750610bf9565b828110610bd657610bd1868686868503866107d7565b610bf7565b8015610bea57610bea8686866000866107d7565b610bf78686838603610925565b505b5050505050565b6001600160a01b038616610c265760405162461bcd60e51b815260040161054090611b70565b6001600160a01b038516610c4c5760405162461bcd60e51b815260040161054090611bbe565b6001600160a01b0386166000908152606860209081526040808320878452909152902054610c839087908790879087908787611016565b610bf7868684611211565b600054610100900460ff16610cb55760405162461bcd60e51b815260040161054090611c0a565b610cbf82826113df565b5050565b6001600160a01b038416610d2a5760405162461bcd60e51b815260206004820152602860248201527f4552433230506172746974696f6e3a206d696e7420746f20746865207a65726f604482015267206164647265737360c01b6064820152608401610540565b610d3960008585868686610bf7565b60008381526066602052604081208054849290610d57908490611b3c565b90915550506001600160a01b038416600090815260686020908152604080832086845290915290208054830190558215610daf576001600160a01b0384166000908152606560205260409020610dad908461141f565b505b82846001600160a01b031660006001600160a01b03167f214c77385889087531951d8c769c43ea4b785d27fe16f60588f0f4790471ce66868686604051610df893929190611c55565b60405180910390a4610e0a848361142b565b6106a160008585868686610bf7565b6001600160a01b038416610e825760405162461bcd60e51b815260206004820152602a60248201527f4552433230506172746974696f6e3a206275726e2066726f6d20746865207a65604482015269726f206164647265737360b01b6064820152608401610540565b610e9184600085868686610bf7565b6001600160a01b038416600090815260686020908152604080832086845290915290205482811015610f195760405162461bcd60e51b815260206004820152602b60248201527f4552433230506172746974696f6e3a206275726e20616d6f756e74206578636560448201526a6564732062616c616e636560a81b6064820152608401610540565b6001600160a01b038516600090815260686020908152604080832087845282528083208685039055606690915281208054859290610f58908490611c7d565b90915550508315801590610f6b57508083145b15610f94576001600160a01b0385166000908152606560205260409020610f92908561150a565b505b8360006001600160a01b0316866001600160a01b03167f214c77385889087531951d8c769c43ea4b785d27fe16f60588f0f4790471ce66878787604051610fdd93929190611c55565b60405180910390a4610fef8584611516565b610bf985600086878787610bf7565b600081831161100d578261100f565b815b9392505050565b8315801590611033575060008481526067602052604090205460ff165b1561103d57600093505b818310156110a45760405162461bcd60e51b815260206004820152602e60248201527f4552433230506172746974696f6e3a20696e73756666696369656e742070617260448201526d746974696f6e2062616c616e636560901b6064820152608401610540565b6110b2878787878686610bf7565b6001600160a01b0380881660009081526068602081815260408084208a855282528084208789039055938a168352908152828220878352905220805483019055828214801561110057508415155b15611129576001600160a01b0387166000908152606560205260409020611127908661150a565b505b8315611153576001600160a01b0386166000908152606560205260409020611151908561141f565b505b83851461119d57600085815260666020526040808220805485810391829055878452919092208054850190559061119b576000868152606760205260409020805460ff191690555b505b84866001600160a01b0316886001600160a01b03167f214c77385889087531951d8c769c43ea4b785d27fe16f60588f0f4790471ce668786866040516111e593929190611c55565b60405180910390a4610b76878787878686610bf7565b6000610414825490565b600061100f8383611664565b6001600160a01b0383166112755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610540565b6001600160a01b0382166112d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610540565b6001600160a01b0383166000908152603360205260409020548181101561134f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610540565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290611386908490611b3c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113d291815260200190565b60405180910390a36106a1565b600054610100900460ff166114065760405162461bcd60e51b815260040161054090611c0a565b60366114128382611cd6565b5060376105bc8282611cd6565b600061100f838361168e565b6001600160a01b0382166114815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610540565b80603560008282546114939190611b3c565b90915550506001600160a01b038216600090815260336020526040812080548392906114c0908490611b3c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600061100f83836116dd565b6001600160a01b0382166115765760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610540565b6001600160a01b038216600090815260336020526040902054818110156115ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610540565b6001600160a01b0383166000908152603360205260408120838303905560358054849290611619908490611c7d565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600082600001828154811061167b5761167b611d96565b9060005260206000200154905092915050565b60008181526001830160205260408120546116d557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610414565b506000610414565b600081815260018301602052604081205480156117c6576000611701600183611c7d565b855490915060009061171590600190611c7d565b905081811461177a57600086600001828154811061173557611735611d96565b906000526020600020015490508087600001848154811061175857611758611d96565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061178b5761178b611dac565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610414565b6000915050610414565b6000815180845260005b818110156117f6576020818501810151868301820152016117da565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061100f60208301846117d0565b80356001600160a01b038116811461184057600080fd5b919050565b6000806040838503121561185857600080fd5b61186183611829565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261189657600080fd5b813567ffffffffffffffff808211156118b1576118b161186f565b604051601f8301601f19908116603f011681019082821181831017156118d9576118d961186f565b816040528381528660208588010111156118f257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561192857600080fd5b61193185611829565b93506020850135925060408501359150606085013567ffffffffffffffff81111561195b57600080fd5b61196787828801611885565b91505092959194509250565b60008060006060848603121561198857600080fd5b61199184611829565b925061199f60208501611829565b9150604084013590509250925092565b600080600080600060a086880312156119c757600080fd5b6119d086611829565b94506119de60208701611829565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a0857600080fd5b611a1488828901611885565b9150509295509295909350565b60008060408385031215611a3457600080fd5b823567ffffffffffffffff80821115611a4c57600080fd5b611a5886838701611885565b93506020850135915080821115611a6e57600080fd5b50611a7b85828601611885565b9150509250929050565b600060208284031215611a9757600080fd5b61100f82611829565b600060208284031215611ab257600080fd5b5035919050565b60008060408385031215611acc57600080fd5b611ad583611829565b9150611ae360208401611829565b90509250929050565b600181811c90821680611b0057607f821691505b602082108103611b2057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561041457610414611b26565b828152604060208201526000611b6860408301846117d0565b949350505050565b6020808252602e908201527f4552433230506172746974696f6e3a207472616e736665722066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b6020808252602c908201527f4552433230506172746974696f6e3a207472616e7366657220746f207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b838152826020820152606060408201526000611c7460608301846117d0565b95945050505050565b8181038181111561041457610414611b26565b601f8211156105bc57600081815260208120601f850160051c81016020861015611cb75750805b601f850160051c820191505b81811015610bf757828155600101611cc3565b815167ffffffffffffffff811115611cf057611cf061186f565b611d0481611cfe8454611aec565b84611c90565b602080601f831160018114611d395760008415611d215750858301515b600019600386901b1c1916600185901b178555610bf7565b600085815260208120601f198616915b82811015611d6857888601518255948401946001909101908401611d49565b5085821015611d865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c806357cb1673116100b8578063b524abcf1161007c578063b524abcf146102ea578063ba497d081461030a578063c3f9213c1461032d578063dd62ed3e14610335578063de26648a14610348578063e92c59f31461035b57600080fd5b806357cb16731461028057806370a082311461029357806395d89b41146102bc578063a457c2d7146102c4578063a9059cbb146102d757600080fd5b806323b872dd1161010a57806323b872dd146101ed57806328972b1514610200578063313ce5671461021357806339509351146102225780634cd88b76146102355780634d30b6be1461024a57600080fd5b806306fdde0314610147578063095ea7b31461016557806310fe82941461018857806318160ddd1461019b5780631c8d5d38146101ad575b600080fd5b61014f61036e565b60405161015c9190611816565b60405180910390f35b610178610173366004611845565b610400565b604051901515815260200161015c565b610178610196366004611912565b61041a565b6035545b60405190815260200161015c565b61019f6101bb366004611973565b6001600160a01b0392831660009081526069602090815260408083209490951682529283528381209181529152205490565b6101786101fb366004611973565b610436565b61017861020e3660046119af565b61045a565b6040516012815260200161015c565b610178610230366004611845565b610485565b610248610243366004611a21565b6104a7565b005b61019f610258366004611845565b6001600160a01b03919091166000908152606860209081526040808320938352929052205490565b61017861028e366004611912565b6105c1565b61019f6102a1366004611a85565b6001600160a01b031660009081526033602052604090205490565b61014f6105d2565b6101786102d2366004611845565b6105e1565b6101786102e5366004611845565b61065c565b61019f6102f8366004611aa0565b60009081526066602052604090205490565b610178610318366004611aa0565b60009081526067602052604090205460ff1690565b61019f600081565b61019f610343366004611ab9565b61066a565b610248610356366004611912565b610695565b610248610369366004611912565b6106a7565b60606036805461037d90611aec565b80601f01602080910402602001604051908101604052809291908181526020018280546103a990611aec565b80156103f65780601f106103cb576101008083540402835291602001916103f6565b820191906000526020600020905b8154815290600101906020018083116103d957829003601f168201915b5050505050905090565b60003361040e8185856106b3565b60019150505b92915050565b60003361042a81878787876107d7565b50600195945050505050565b600033610444858285610925565b61044f858585610999565b506001949350505050565b60003361046a8782878787610b7f565b610478878787888888610c00565b5060019695505050505050565b60003361040e818585610498838361066a565b6104a29190611b3c565b6106b3565b600054610100900460ff16158080156104c75750600054600160ff909116105b806104e15750303b1580156104e1575060005460ff166001145b6105495760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561056c576000805461ff0019166101001790555b6105768383610c8e565b80156105bc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60003361042a818787808888610c00565b60606037805461037d90611aec565b600033816105ef828661066a565b90508381101561064f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610540565b61044f82868684036106b3565b60003361040e818585610999565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6106a184848484610cc3565b50505050565b6106a184848484610e19565b6001600160a01b0383166107155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610540565b6001600160a01b0382166107765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610540565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0385166108435760405162461bcd60e51b815260206004820152602d60248201527f4552433230506172746974696f6e3a20617070726f76652066726f6d2074686560448201526c207a65726f206164647265737360981b6064820152608401610540565b6001600160a01b0384166108ad5760405162461bcd60e51b815260206004820152602b60248201527f4552433230506172746974696f6e3a20617070726f766520746f20746865207a60448201526a65726f206164647265737360a81b6064820152608401610540565b6001600160a01b0380861660008181526069602090815260408083209489168084529482528083208884529091529081902085905551859291907fc7c99c94b6f2aa290d29935e03ed0355e55c0f0d30602ed539bc5dba9d8a1b16906109169087908790611b4f565b60405180910390a45050505050565b6000610931848461066a565b905060001981146106a1578181101561098c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610540565b6106a184848484036106b3565b6001600160a01b0383166109bf5760405162461bcd60e51b815260040161054090611b70565b6001600160a01b0382166109e55760405162461bcd60e51b815260040161054090611bbe565b6001600160a01b03831660009081526065602090815260408083206068835281842084805290925282205490918391908115610a5157610a258284610ffe565b9050610a4b87876000801b6000801b868660405180602001604052806000815250611016565b80830392505b8215610b6b576000610a62856111fb565b905060005b81811015610b00576000610a7b8783611205565b6001600160a01b038b1660009081526068602090815260408083208484529091528120549650909150859003610ab15750610a67565b610abb8587610ffe565b93508386039550610ae08a8a8384898960405180602001604052806000815250611016565b838503610af35760001990920191610afa565b6001909101905b50610a67565b60008511610b685760405162461bcd60e51b815260206004820152602f60248201527f4552433230506172746974696f6e3a207472616e7366657220616d6f756e742060448201526e657863656564732062616c616e636560881b6064820152608401610540565b50505b610b76878787611211565b50505050505050565b6001600160a01b03858116600090815260696020908152604080832093881683529281528282208683529052205460018101610bbb5750610bf9565b828110610bd657610bd1868686868503866107d7565b610bf7565b8015610bea57610bea8686866000866107d7565b610bf78686838603610925565b505b5050505050565b6001600160a01b038616610c265760405162461bcd60e51b815260040161054090611b70565b6001600160a01b038516610c4c5760405162461bcd60e51b815260040161054090611bbe565b6001600160a01b0386166000908152606860209081526040808320878452909152902054610c839087908790879087908787611016565b610bf7868684611211565b600054610100900460ff16610cb55760405162461bcd60e51b815260040161054090611c0a565b610cbf82826113df565b5050565b6001600160a01b038416610d2a5760405162461bcd60e51b815260206004820152602860248201527f4552433230506172746974696f6e3a206d696e7420746f20746865207a65726f604482015267206164647265737360c01b6064820152608401610540565b610d3960008585868686610bf7565b60008381526066602052604081208054849290610d57908490611b3c565b90915550506001600160a01b038416600090815260686020908152604080832086845290915290208054830190558215610daf576001600160a01b0384166000908152606560205260409020610dad908461141f565b505b82846001600160a01b031660006001600160a01b03167f214c77385889087531951d8c769c43ea4b785d27fe16f60588f0f4790471ce66868686604051610df893929190611c55565b60405180910390a4610e0a848361142b565b6106a160008585868686610bf7565b6001600160a01b038416610e825760405162461bcd60e51b815260206004820152602a60248201527f4552433230506172746974696f6e3a206275726e2066726f6d20746865207a65604482015269726f206164647265737360b01b6064820152608401610540565b610e9184600085868686610bf7565b6001600160a01b038416600090815260686020908152604080832086845290915290205482811015610f195760405162461bcd60e51b815260206004820152602b60248201527f4552433230506172746974696f6e3a206275726e20616d6f756e74206578636560448201526a6564732062616c616e636560a81b6064820152608401610540565b6001600160a01b038516600090815260686020908152604080832087845282528083208685039055606690915281208054859290610f58908490611c7d565b90915550508315801590610f6b57508083145b15610f94576001600160a01b0385166000908152606560205260409020610f92908561150a565b505b8360006001600160a01b0316866001600160a01b03167f214c77385889087531951d8c769c43ea4b785d27fe16f60588f0f4790471ce66878787604051610fdd93929190611c55565b60405180910390a4610fef8584611516565b610bf985600086878787610bf7565b600081831161100d578261100f565b815b9392505050565b8315801590611033575060008481526067602052604090205460ff165b1561103d57600093505b818310156110a45760405162461bcd60e51b815260206004820152602e60248201527f4552433230506172746974696f6e3a20696e73756666696369656e742070617260448201526d746974696f6e2062616c616e636560901b6064820152608401610540565b6110b2878787878686610bf7565b6001600160a01b0380881660009081526068602081815260408084208a855282528084208789039055938a168352908152828220878352905220805483019055828214801561110057508415155b15611129576001600160a01b0387166000908152606560205260409020611127908661150a565b505b8315611153576001600160a01b0386166000908152606560205260409020611151908561141f565b505b83851461119d57600085815260666020526040808220805485810391829055878452919092208054850190559061119b576000868152606760205260409020805460ff191690555b505b84866001600160a01b0316886001600160a01b03167f214c77385889087531951d8c769c43ea4b785d27fe16f60588f0f4790471ce668786866040516111e593929190611c55565b60405180910390a4610b76878787878686610bf7565b6000610414825490565b600061100f8383611664565b6001600160a01b0383166112755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610540565b6001600160a01b0382166112d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610540565b6001600160a01b0383166000908152603360205260409020548181101561134f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610540565b6001600160a01b03808516600090815260336020526040808220858503905591851681529081208054849290611386908490611b3c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113d291815260200190565b60405180910390a36106a1565b600054610100900460ff166114065760405162461bcd60e51b815260040161054090611c0a565b60366114128382611cd6565b5060376105bc8282611cd6565b600061100f838361168e565b6001600160a01b0382166114815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610540565b80603560008282546114939190611b3c565b90915550506001600160a01b038216600090815260336020526040812080548392906114c0908490611b3c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600061100f83836116dd565b6001600160a01b0382166115765760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610540565b6001600160a01b038216600090815260336020526040902054818110156115ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610540565b6001600160a01b0383166000908152603360205260408120838303905560358054849290611619908490611c7d565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600082600001828154811061167b5761167b611d96565b9060005260206000200154905092915050565b60008181526001830160205260408120546116d557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610414565b506000610414565b600081815260018301602052604081205480156117c6576000611701600183611c7d565b855490915060009061171590600190611c7d565b905081811461177a57600086600001828154811061173557611735611d96565b906000526020600020015490508087600001848154811061175857611758611d96565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061178b5761178b611dac565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610414565b6000915050610414565b6000815180845260005b818110156117f6576020818501810151868301820152016117da565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061100f60208301846117d0565b80356001600160a01b038116811461184057600080fd5b919050565b6000806040838503121561185857600080fd5b61186183611829565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261189657600080fd5b813567ffffffffffffffff808211156118b1576118b161186f565b604051601f8301601f19908116603f011681019082821181831017156118d9576118d961186f565b816040528381528660208588010111156118f257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561192857600080fd5b61193185611829565b93506020850135925060408501359150606085013567ffffffffffffffff81111561195b57600080fd5b61196787828801611885565b91505092959194509250565b60008060006060848603121561198857600080fd5b61199184611829565b925061199f60208501611829565b9150604084013590509250925092565b600080600080600060a086880312156119c757600080fd5b6119d086611829565b94506119de60208701611829565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a0857600080fd5b611a1488828901611885565b9150509295509295909350565b60008060408385031215611a3457600080fd5b823567ffffffffffffffff80821115611a4c57600080fd5b611a5886838701611885565b93506020850135915080821115611a6e57600080fd5b50611a7b85828601611885565b9150509250929050565b600060208284031215611a9757600080fd5b61100f82611829565b600060208284031215611ab257600080fd5b5035919050565b60008060408385031215611acc57600080fd5b611ad583611829565b9150611ae360208401611829565b90509250929050565b600181811c90821680611b0057607f821691505b602082108103611b2057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561041457610414611b26565b828152604060208201526000611b6860408301846117d0565b949350505050565b6020808252602e908201527f4552433230506172746974696f6e3a207472616e736665722066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b6020808252602c908201527f4552433230506172746974696f6e3a207472616e7366657220746f207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b838152826020820152606060408201526000611c7460608301846117d0565b95945050505050565b8181038181111561041457610414611b26565b601f8211156105bc57600081815260208120601f850160051c81016020861015611cb75750805b601f850160051c820191505b81811015610bf757828155600101611cc3565b815167ffffffffffffffff811115611cf057611cf061186f565b611d0481611cfe8454611aec565b84611c90565b602080601f831160018114611d395760008415611d215750858301515b600019600386901b1c1916600185901b178555610bf7565b600085815260208120601f198616915b82811015611d6857888601518255948401946001909101908401611d49565b5085821015611d865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
