Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 292 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add White Listed | 5218905 | 2561 days ago | IN | 0 ETH | 0.00072006 | ||||
Set Allocation | 5218444 | 2561 days ago | IN | 0 ETH | 0.00028295 | ||||
Add White Listed | 5218416 | 2561 days ago | IN | 0 ETH | 0.0002395 | ||||
Add White Listed | 5218393 | 2561 days ago | IN | 0 ETH | 0.0002395 | ||||
Add White Listed | 5218174 | 2561 days ago | IN | 0 ETH | 0.0007166 | ||||
Add White Listed | 5218163 | 2561 days ago | IN | 0 ETH | 0.0007166 | ||||
Add White Listed | 5218138 | 2561 days ago | IN | 0 ETH | 0.0007166 | ||||
Add White Listed | 5218116 | 2561 days ago | IN | 0 ETH | 0.00069309 | ||||
Add White Listed | 5218103 | 2561 days ago | IN | 0 ETH | 0.0007166 | ||||
Add White Listed | 5218085 | 2561 days ago | IN | 0 ETH | 0.0007166 | ||||
Add White Listed | 5218065 | 2561 days ago | IN | 0 ETH | 0.0007166 | ||||
Add White Listed | 5218043 | 2561 days ago | IN | 0 ETH | 0.00020931 | ||||
Add White Listed | 5218041 | 2561 days ago | IN | 0 ETH | 0.00063698 | ||||
Set Batch Number | 5217357 | 2561 days ago | IN | 0 ETH | 0.00024695 | ||||
Set Batch Number | 5217348 | 2561 days ago | IN | 0 ETH | 0.00021608 | ||||
Set Batch Number | 5217338 | 2561 days ago | IN | 0 ETH | 0.00012644 | ||||
Set Batch Number | 5217331 | 2561 days ago | IN | 0 ETH | 0.00024489 | ||||
Add White Listed | 5217323 | 2561 days ago | IN | 0 ETH | 0.00059717 | ||||
Add White Listed | 5217318 | 2561 days ago | IN | 0 ETH | 0.00063698 | ||||
Set Batch Number | 5217304 | 2561 days ago | IN | 0 ETH | 0.00024695 | ||||
Set Batch Number | 5217294 | 2561 days ago | IN | 0 ETH | 0.00024695 | ||||
Set Batch Number | 5217283 | 2561 days ago | IN | 0 ETH | 0.00024695 | ||||
Set Batch Number | 5217275 | 2561 days ago | IN | 0 ETH | 0.00021015 | ||||
Set Batch Number | 5217265 | 2561 days ago | IN | 0 ETH | 0.00015434 | ||||
Add White Listed | 5217242 | 2561 days ago | IN | 0 ETH | 0.00039811 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WhiteListed
Compiler Version
v0.4.20-nightly.2018.1.6+commit.2548228b
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-03-04 */ pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // WhiteListed - SENC Token Sale Whitelisting Contract // // Copyright (c) 2018 InfoCorp Technologies Pte Ltd. // http://www.sentinel-chain.org/ // // The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // The SENC Token Sale Whitelist Contract is designed to facilitate the features: // // 1. Track whitelisted users and allocations // Each whitelisted user is tracked by its wallet address as well as the maximum // SENC allocation it can purchase. // // 2. Track batches // To prevent a gas war, each contributor will be assigned a batch number that // corresponds to the time that the contributor can start purchasing. // // 3. Whitelist Operators // A primary and a secondary operators can be assigned to facilitate the management // of the whiteList. // // ---------------------------------------------------------------------------- contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract OperatableBasic { function setPrimaryOperator (address addr) public; function setSecondaryOperator (address addr) public; function isPrimaryOperator(address addr) public view returns (bool); function isSecondaryOperator(address addr) public view returns (bool); } contract Operatable is Ownable, OperatableBasic { address public primaryOperator; address public secondaryOperator; modifier canOperate() { require(msg.sender == primaryOperator || msg.sender == secondaryOperator || msg.sender == owner); _; } function Operatable() public { primaryOperator = owner; secondaryOperator = owner; } function setPrimaryOperator (address addr) public onlyOwner { primaryOperator = addr; } function setSecondaryOperator (address addr) public onlyOwner { secondaryOperator = addr; } function isPrimaryOperator(address addr) public view returns (bool) { return (addr == primaryOperator); } function isSecondaryOperator(address addr) public view returns (bool) { return (addr == secondaryOperator); } } contract WhiteListedBasic is OperatableBasic { function addWhiteListed(address[] addrs, uint[] batches, uint[] weiAllocation) external; function getAllocated(address addr) public view returns (uint); function getBatchNumber(address addr) public view returns (uint); function getWhiteListCount() public view returns (uint); function isWhiteListed(address addr) public view returns (bool); function removeWhiteListed(address addr) public; function setAllocation(address[] addrs, uint[] allocation) public; function setBatchNumber(address[] addrs, uint[] batch) public; } contract WhiteListed is Operatable, WhiteListedBasic { struct Batch { bool isWhitelisted; uint weiAllocated; uint batchNumber; } uint public count; mapping (address => Batch) public batchMap; event Whitelisted(address indexed addr, uint whitelistedCount, bool isWhitelisted, uint indexed batch, uint weiAllocation); function addWhiteListed(address[] addrs, uint[] batches, uint[] weiAllocation) external canOperate { require(addrs.length == batches.length); require(addrs.length == weiAllocation.length); for (uint i = 0; i < addrs.length; i++) { Batch storage batch = batchMap[addrs[i]]; if (batch.isWhitelisted != true) { batch.isWhitelisted = true; batch.weiAllocated = weiAllocation[i]; batch.batchNumber = batches[i]; count++; Whitelisted(addrs[i], count, true, batches[i], weiAllocation[i]); } } } function getAllocated(address addr) public view returns (uint) { return batchMap[addr].weiAllocated; } function getBatchNumber(address addr) public view returns (uint) { return batchMap[addr].batchNumber; } function getWhiteListCount() public view returns (uint) { return count; } function isWhiteListed(address addr) public view returns (bool) { return batchMap[addr].isWhitelisted; } function removeWhiteListed(address addr) public canOperate { Batch storage batch = batchMap[addr]; require(batch.isWhitelisted == true); batch.isWhitelisted = false; count--; Whitelisted(addr, count, false, batch.batchNumber, batch.weiAllocated); } function setAllocation(address[] addrs, uint[] weiAllocation) public canOperate { require(addrs.length == weiAllocation.length); for (uint i = 0; i < addrs.length; i++) { if (batchMap[addrs[i]].isWhitelisted == true) { batchMap[addrs[i]].weiAllocated = weiAllocation[i]; } } } function setBatchNumber(address[] addrs, uint[] batch) public canOperate { require(addrs.length == batch.length); for (uint i = 0; i < addrs.length; i++) { if (batchMap[addrs[i]].isWhitelisted == true) { batchMap[addrs[i]].batchNumber = batch[i]; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"count","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isSecondaryOperator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isPrimaryOperator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"},{"name":"weiAllocation","type":"uint256[]"}],"name":"setAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setSecondaryOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"getBatchNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"},{"name":"batches","type":"uint256[]"},{"name":"weiAllocation","type":"uint256[]"}],"name":"addWhiteListed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isWhiteListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWhiteListCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"getAllocated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setPrimaryOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"},{"name":"batch","type":"uint256[]"}],"name":"setBatchNumber","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"primaryOperator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"batchMap","outputs":[{"name":"isWhitelisted","type":"bool"},{"name":"weiAllocated","type":"uint256"},{"name":"batchNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeWhiteListed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondaryOperator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"whitelistedCount","type":"uint256"},{"indexed":false,"name":"isWhitelisted","type":"bool"},{"indexed":true,"name":"batch","type":"uint256"},{"indexed":false,"name":"weiAllocation","type":"uint256"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
606060405260008054600160a060020a03338116600160a060020a03199283161792839055600180548316939091169283179055600280549091169091179055610b458061004e6000396000f3006060604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306661abd8114610100578063124cf83014610125578063281027b9146101585780633102b21a146101775780635f94e3de146102085780636102c049146102275780636f147f5c146102465780636f9170f61461027c5780638da5cb5b1461029b5780638f82b8c4146102ca5780639e59eb14146102dd578063b2ccda0e146102fc578063c351fdfd1461031b578063d33656e0146103aa578063d792d9ee146103bd578063ef12536014610402578063f2fde38b14610421578063fd0c78c214610440575b600080fd5b341561010b57600080fd5b610113610453565b60405190815260200160405180910390f35b341561013057600080fd5b610144600160a060020a0360043516610459565b604051901515815260200160405180910390f35b341561016357600080fd5b610144600160a060020a036004351661046d565b341561018257600080fd5b61020660046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061048195505050505050565b005b341561021357600080fd5b610206600160a060020a036004351661058a565b341561023257600080fd5b610113600160a060020a03600435166105d4565b341561025157600080fd5b61020660246004803582810192908201359181358083019290820135916044359182019101356105f2565b341561028757600080fd5b610144600160a060020a03600435166107a6565b34156102a657600080fd5b6102ae6107c4565b604051600160a060020a03909116815260200160405180910390f35b34156102d557600080fd5b6101136107d3565b34156102e857600080fd5b610113600160a060020a03600435166107d9565b341561030757600080fd5b610206600160a060020a03600435166107f7565b341561032657600080fd5b61020660046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061084195505050505050565b34156103b557600080fd5b6102ae610945565b34156103c857600080fd5b6103dc600160a060020a0360043516610954565b604051921515835260208301919091526040808301919091526060909101905180910390f35b341561040d57600080fd5b610206600160a060020a0360043516610979565b341561042c57600080fd5b610206600160a060020a0360043516610a6f565b341561044b57600080fd5b6102ae610b0a565b60035481565b600254600160a060020a0390811691161490565b600154600160a060020a0390811691161490565b60015460009033600160a060020a03908116911614806104af575060025433600160a060020a039081169116145b806104c8575060005433600160a060020a039081169116145b15156104d357600080fd5b81518351146104e157600080fd5b5060005b825181101561058557600460008483815181106104fe57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff1615156001141561057d5781818151811061053b57fe5b906020019060200201516004600085848151811061055557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020600101555b6001016104e5565b505050565b60005433600160a060020a039081169116146105a557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526004602052604090206002015490565b600154600090819033600160a060020a0390811691161480610622575060025433600160a060020a039081169116145b8061063b575060005433600160a060020a039081169116145b151561064657600080fd5b86851461065257600080fd5b86831461065e57600080fd5b600091505b8682101561079c576004600089898581811061067b57fe5b60209081029290920135600160a060020a03168352508101919091526040016000208054909150600160ff90911615151461079157805460ff191660011781558383838181106106c757fe5b60200291909101356001830155508585838181106106e157fe5b602002919091013560028301555060038054600101905585858381811061070457fe5b90506020020135888884818110151561071957fe5b90506020020135600160a060020a0316600160a060020a03167f77c09a19fcd5375bb199fef6f7ff5c86bb393ad9b0574d097475dbec3263d43d6003546001888888818110151561076657fe5b9050602002013560405192835290151560208301526040808301919091526060909101905180910390a35b600190910190610663565b5050505050505050565b600160a060020a031660009081526004602052604090205460ff1690565b600054600160a060020a031681565b60035490565b600160a060020a031660009081526004602052604090206001015490565b60005433600160a060020a0390811691161461081257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015460009033600160a060020a039081169116148061086f575060025433600160a060020a039081169116145b80610888575060005433600160a060020a039081169116145b151561089357600080fd5b81518351146108a157600080fd5b5060005b825181101561058557600460008483815181106108be57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff1615156001141561093d578181815181106108fb57fe5b906020019060200201516004600085848151811061091557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020600201555b6001016108a5565b600154600160a060020a031681565b60046020526000908152604090208054600182015460029092015460ff909116919083565b60015460009033600160a060020a03908116911614806109a7575060025433600160a060020a039081169116145b806109c0575060005433600160a060020a039081169116145b15156109cb57600080fd5b50600160a060020a0381166000908152600460205260409020805460ff1615156001146109f757600080fd5b805460ff19168155600380546000190190819055600282015460018301549091600160a060020a038516917f77c09a19fcd5375bb199fef6f7ff5c86bb393ad9b0574d097475dbec3263d43d919060009060405192835290151560208301526040808301919091526060909101905180910390a35050565b60005433600160a060020a03908116911614610a8a57600080fd5b600160a060020a0381161515610a9f57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600160a060020a0316815600a165627a7a723058203522fc344f3576da3fe2feb65df0b03eb440fe2429dd5997adda7ae09c22beb20029
Deployed Bytecode
0x6060604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306661abd8114610100578063124cf83014610125578063281027b9146101585780633102b21a146101775780635f94e3de146102085780636102c049146102275780636f147f5c146102465780636f9170f61461027c5780638da5cb5b1461029b5780638f82b8c4146102ca5780639e59eb14146102dd578063b2ccda0e146102fc578063c351fdfd1461031b578063d33656e0146103aa578063d792d9ee146103bd578063ef12536014610402578063f2fde38b14610421578063fd0c78c214610440575b600080fd5b341561010b57600080fd5b610113610453565b60405190815260200160405180910390f35b341561013057600080fd5b610144600160a060020a0360043516610459565b604051901515815260200160405180910390f35b341561016357600080fd5b610144600160a060020a036004351661046d565b341561018257600080fd5b61020660046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061048195505050505050565b005b341561021357600080fd5b610206600160a060020a036004351661058a565b341561023257600080fd5b610113600160a060020a03600435166105d4565b341561025157600080fd5b61020660246004803582810192908201359181358083019290820135916044359182019101356105f2565b341561028757600080fd5b610144600160a060020a03600435166107a6565b34156102a657600080fd5b6102ae6107c4565b604051600160a060020a03909116815260200160405180910390f35b34156102d557600080fd5b6101136107d3565b34156102e857600080fd5b610113600160a060020a03600435166107d9565b341561030757600080fd5b610206600160a060020a03600435166107f7565b341561032657600080fd5b61020660046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061084195505050505050565b34156103b557600080fd5b6102ae610945565b34156103c857600080fd5b6103dc600160a060020a0360043516610954565b604051921515835260208301919091526040808301919091526060909101905180910390f35b341561040d57600080fd5b610206600160a060020a0360043516610979565b341561042c57600080fd5b610206600160a060020a0360043516610a6f565b341561044b57600080fd5b6102ae610b0a565b60035481565b600254600160a060020a0390811691161490565b600154600160a060020a0390811691161490565b60015460009033600160a060020a03908116911614806104af575060025433600160a060020a039081169116145b806104c8575060005433600160a060020a039081169116145b15156104d357600080fd5b81518351146104e157600080fd5b5060005b825181101561058557600460008483815181106104fe57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff1615156001141561057d5781818151811061053b57fe5b906020019060200201516004600085848151811061055557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020600101555b6001016104e5565b505050565b60005433600160a060020a039081169116146105a557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526004602052604090206002015490565b600154600090819033600160a060020a0390811691161480610622575060025433600160a060020a039081169116145b8061063b575060005433600160a060020a039081169116145b151561064657600080fd5b86851461065257600080fd5b86831461065e57600080fd5b600091505b8682101561079c576004600089898581811061067b57fe5b60209081029290920135600160a060020a03168352508101919091526040016000208054909150600160ff90911615151461079157805460ff191660011781558383838181106106c757fe5b60200291909101356001830155508585838181106106e157fe5b602002919091013560028301555060038054600101905585858381811061070457fe5b90506020020135888884818110151561071957fe5b90506020020135600160a060020a0316600160a060020a03167f77c09a19fcd5375bb199fef6f7ff5c86bb393ad9b0574d097475dbec3263d43d6003546001888888818110151561076657fe5b9050602002013560405192835290151560208301526040808301919091526060909101905180910390a35b600190910190610663565b5050505050505050565b600160a060020a031660009081526004602052604090205460ff1690565b600054600160a060020a031681565b60035490565b600160a060020a031660009081526004602052604090206001015490565b60005433600160a060020a0390811691161461081257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015460009033600160a060020a039081169116148061086f575060025433600160a060020a039081169116145b80610888575060005433600160a060020a039081169116145b151561089357600080fd5b81518351146108a157600080fd5b5060005b825181101561058557600460008483815181106108be57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff1615156001141561093d578181815181106108fb57fe5b906020019060200201516004600085848151811061091557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020600201555b6001016108a5565b600154600160a060020a031681565b60046020526000908152604090208054600182015460029092015460ff909116919083565b60015460009033600160a060020a03908116911614806109a7575060025433600160a060020a039081169116145b806109c0575060005433600160a060020a039081169116145b15156109cb57600080fd5b50600160a060020a0381166000908152600460205260409020805460ff1615156001146109f757600080fd5b805460ff19168155600380546000190190819055600282015460018301549091600160a060020a038516917f77c09a19fcd5375bb199fef6f7ff5c86bb393ad9b0574d097475dbec3263d43d919060009060405192835290151560208301526040808301919091526060909101905180910390a35050565b60005433600160a060020a03908116911614610a8a57600080fd5b600160a060020a0381161515610a9f57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600254600160a060020a0316815600a165627a7a723058203522fc344f3576da3fe2feb65df0b03eb440fe2429dd5997adda7ae09c22beb20029
Swarm Source
bzzr://3522fc344f3576da3fe2feb65df0b03eb440fe2429dd5997adda7ae09c22beb2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.