model

package
v0.0.0-...-5ecede5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2018 License: LGPL-3.0-or-later Imports: 17 Imported by: 0

Documentation

Overview

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Index

Constants

View Source
const (
	NotificationTypeSingle = 1
	NotificationTypeRole   = 2
)
View Source
const (
	TransactionRateOnBlock transactionRate = iota + 1
	TransactionRateStopNetwork
)

This constants contains values of transactions priority

View Source
const BinaryTableSuffix = "_binaries"
View Source
const (
	ParamMoneyDigit = "money_digit"
)
View Source
const ProgressComplete = "complete"

ProgressComplete status of installation progress

Variables

View Source
var (
	// DBConn is orm connection
	DBConn *gorm.DB

	// ErrRecordNotFound is Not Found Record wrapper
	ErrRecordNotFound = gorm.ErrRecordNotFound

	// ErrDBConn database connection error
	ErrDBConn = errors.New("Database connection error")
)

Functions

func AlterTableAddColumn

func AlterTableAddColumn(transaction *DbTransaction, tableName, columnName, columnType string) error

AlterTableAddColumn is adding column to table

func AlterTableDropColumn

func AlterTableDropColumn(tableName, columnName string) error

AlterTableDropColumn is dropping column from table

func BatchInsert

func BatchInsert(rows []BatchModel, fields []string) error

BatchInsert create and execute batch queries from rows splitted by maxBatchRows and fields

func CreateIndex

func CreateIndex(transaction *DbTransaction, indexName, tableName, onColumn string) error

CreateIndex is creating index on table column

func CreateTable

func CreateTable(transaction *DbTransaction, tableName, colsSQL string) error

CreateTable is creating table

func CreateVDETable

func CreateVDETable(transaction *DbTransaction, tableName, colsSQL string) error

CreateVDETable is creating VDE table

func Delete

func Delete(transaction *DbTransaction, tblname, where string) error

Delete is deleting table rows

func DeleteLogTransactionsByHash

func DeleteLogTransactionsByHash(transaction *DbTransaction, hash []byte) (int64, error)

DeleteLogTransactionsByHash is deleting record by hash

func DeleteLoopedTransactions

func DeleteLoopedTransactions() (int64, error)

DeleteLoopedTransactions deleting lopped transactions

func DeleteQueueTxByHash

func DeleteQueueTxByHash(transaction *DbTransaction, hash []byte) (int64, error)

DeleteQueueTxByHash is deleting queue tx by hash

func DeleteTransactionByHash

func DeleteTransactionByHash(hash []byte) (int64, error)

DeleteTransactionByHash deleting transaction by hash

func DeleteTransactionIfUnused

func DeleteTransactionIfUnused(transaction *DbTransaction, transactionHash []byte) (int64, error)

DeleteTransactionIfUnused deleting unused transaction

func DeleteUsedTransactions

func DeleteUsedTransactions(transaction *DbTransaction) (int64, error)

DeleteUsedTransactions deleting used transaction

func DropDatabase

func DropDatabase(name string) error

DropDatabase kill all process and drop database

func DropTable

func DropTable(transaction *DbTransaction, tableName string) error

DropTable is dropping table

func DropTables

func DropTables() error

DropTables is dropping all of the tables

func ExecSchema

func ExecSchema() error

ExecSchema is executing schema

func ExecSchemaEcosystem

func ExecSchemaEcosystem(db *DbTransaction, id int, wallet int64, name string, founder int64) error

ExecSchemaEcosystem is executing ecosystem schema

func ExecSchemaLocalData

func ExecSchemaLocalData(id int, wallet int64) error

ExecSchemaLocalData is executing schema with local data

func GetAll

func GetAll(query string, countRows int, args ...interface{}) ([]map[string]string, error)

GetAll returns all transaction

func GetAllColumnTypes

func GetAllColumnTypes(tblname string) ([]map[string]string, error)

GetAllColumnTypes returns column types for table

func GetAllSystemStatesIDs

func GetAllSystemStatesIDs() ([]int64, error)

GetAllSystemStatesIDs is retrieving all ecosystems ids

func GetAllTransaction

func GetAllTransaction(transaction *DbTransaction, query string, countRows int, args ...interface{}) ([]map[string]string, error)

GetAllTransaction is retrieve all query result rows

func GetAllTransactions

func GetAllTransactions(limit int) (*[]Transaction, error)

GetAllTransactions is retrieving all transactions with limit

func GetAllTx

func GetAllTx(transaction *DbTransaction, query string, countRows int, args ...interface{}) ([]map[string]string, error)

GetAllTx returns all tx's

func GetAllUnsentTransactions

func GetAllUnsentTransactions() (*[]Transaction, error)

GetAllUnsentTransactions is retrieving all unset transactions

func GetColumnByID

func GetColumnByID(table, column, id string) (result string, err error)

GetColumnByID returns the value of the column from the table by id

func GetColumnCount

func GetColumnCount(tableName string) (int64, error)

GetColumnCount is counting rows in table

func GetColumnDataTypeCharMaxLength

func GetColumnDataTypeCharMaxLength(tableName, columnName string) (map[string]string, error)

GetColumnDataTypeCharMaxLength is returns max length of table column

func GetColumnType

func GetColumnType(tblname, column string) (itype string, err error)

GetColumnType is returns type of column

func GetDB

func GetDB(tr *DbTransaction) *gorm.DB

GetDB is returning gorm.DB

func GetExcessCommonTokenMovementPerDay

func GetExcessCommonTokenMovementPerDay(tx *DbTransaction) (amount decimal.Decimal, err error)

GetExcessCommonTokenMovementPerDay returns sum of amounts 24 hours

func GetLogTransactionsCount

func GetLogTransactionsCount(hash []byte) (int64, error)

GetLogTransactionsCount count records by transaction hash

func GetMemberRoles

func GetMemberRoles(tx *DbTransaction, ecosys, member int64) (roles map[int64]string, err error)

GetMemberRoles return map[id]name all roles assign to member in ecosystem

func GetMetricValues

func GetMetricValues(metric, timeInterval, aggregateFunc string) ([]interface{}, error)

GetMetricValues returns aggregated metric values in the time interval

func GetNextID

func GetNextID(transaction *DbTransaction, table string) (int64, error)

GetNextID returns next ID of table

func GetNotificationsCount

func GetNotificationsCount(ecosystemID int64, userIDs []int64) ([]map[string]string, error)

GetNotificationsCount returns all unclosed notifications by users and ecosystem through role_id if userIDs is nil or empty then filter will be skipped

func GetQueuedTransactionsCount

func GetQueuedTransactionsCount(hash []byte) (int64, error)

GetQueuedTransactionsCount counting queued transactions

func GetRecordsCountTx

func GetRecordsCountTx(db *DbTransaction, tableName string) (int64, error)

GetRecordsCountTx is counting all records of table in transaction

func GetRowConditionsByTableNameAndID

func GetRowConditionsByTableNameAndID(tblname string, id int64) (string, error)

GetRowConditionsByTableNameAndID returns value of `conditions` field for table row by id

func GetTransactionCountAll

func GetTransactionCountAll() (int64, error)

GetTransactionCountAll count all transactions

func GetTransactionsCount

func GetTransactionsCount(hash []byte) (int64, error)

GetTransactionsCount count all transactions by hash

func GetTxesByHashlist

func GetTxesByHashlist(dbtx *DbTransaction, hashes [][]byte) (map[string]*Transaction, error)

GetTxesByHashlist returns map of hash-*Transaction

func GormClose

func GormClose() error

GormClose is closing Gorm connection

func GormInit

func GormInit(host string, port int, user string, pass string, dbName string) error

GormInit is initializes Gorm connection

func HistoryTableName

func HistoryTableName(prefix int64) string

HistoryTableName returns name of history table

func IncrementTxAttemptCount

func IncrementTxAttemptCount(transaction *DbTransaction, transactionHash []byte) (int64, error)

IncrementTxAttemptCount increases attempt column

func InitDB

func InitDB(cfg conf.DBConfig) error

InitDB drop all tables and exec db schema

func IsIndex

func IsIndex(tblname, column string) (bool, error)

IsIndex returns is table column is an index

func IsTable

func IsTable(tblname string) bool

IsTable returns is table exists

func KeyTableName

func KeyTableName(prefix int64) string

KeyTableName returns name of keys table

func MarkTransactionSent

func MarkTransactionSent(transactionHash []byte) (int64, error)

MarkTransactionSent is marking transaction as sent

func MarkTransactionUnusedAndUnverified

func MarkTransactionUnusedAndUnverified(transaction *DbTransaction, transactionHash []byte) (int64, error)

MarkTransactionUnusedAndUnverified is marking transaction unused and unverified

func MarkTransactionUsed

func MarkTransactionUsed(transaction *DbTransaction, transactionHash []byte) (int64, error)

MarkTransactionUsed is marking transaction as used

func MarkVerifiedAndNotUsedTransactionsUnverified

func MarkVerifiedAndNotUsedTransactionsUnverified() (int64, error)

MarkVerifiedAndNotUsedTransactionsUnverified is marking verified and unused transaction as unverified

func MemberHasRole

func MemberHasRole(tx *DbTransaction, ecosys, member, role int64) (bool, error)

MemberHasRole returns true if member has role

func NumIndexes

func NumIndexes(tblname string) (int, error)

NumIndexes is counting table indexes

func SendTx

func SendTx(txType int64, adminWallet int64, data []byte) ([]byte, error)

SendTx is creates transaction

func SetStopNow

func SetStopNow() error

SetStopNow is updating daemon stopping time to now

func Update

func Update(transaction *DbTransaction, tblname, set, where string) error

Update is updating table rows

Types

type APLSenderTxCount

type APLSenderTxCount struct {
	SenderID int64
	TxCount  int64
}

APLSenderTxCount struct to scan query result

func GetExcessTokenMovementQtyPerBlock

func GetExcessTokenMovementQtyPerBlock(tx *DbTransaction, blockID int64) (excess []APLSenderTxCount, err error)

GetExcessTokenMovementQtyPerBlock returns from to pairs where APL transactions count greather than tokenMovementQtyPerBlockLimit per 24 hours

type APLTransfer

type APLTransfer struct {
	SenderID    int64
	RecipientID int64
	Amount      decimal.Decimal
}

APLTransfer from to amount

func GetExcessFromToTokenMovementPerDay

func GetExcessFromToTokenMovementPerDay(tx *DbTransaction) (excess []APLTransfer, err error)

GetExcessFromToTokenMovementPerDay returns from to pairs where sum of amount greather than fromToPerDayLimit per 24 hours

type AppParam

type AppParam struct {
	ID         int64  `gorm:"primary_key;not null"`
	AppID      int64  `gorm:"not null"`
	Name       string `gorm:"not null;size:100"`
	Value      string `gorm:"not null"`
	Conditions string `gorm:"not null"`
	// contains filtered or unexported fields
}

AppParam is model

func (*AppParam) Get

func (sp *AppParam) Get(transaction *DbTransaction, app int64, name string) (bool, error)

Get is retrieving model from database

func (*AppParam) GetAllAppParameters

func (sp *AppParam) GetAllAppParameters(app int64) ([]AppParam, error)

GetAllAppParameters is returning all state parameters

func (*AppParam) SetTablePrefix

func (sp *AppParam) SetTablePrefix(tablePrefix string)

SetTablePrefix is setting table prefix

func (*AppParam) TableName

func (sp *AppParam) TableName() string

TableName returns name of table

type BadBlocks

type BadBlocks struct {
	ID             int64
	ProducerNodeId int64
	BlockId        int64
	ConsumerNodeId int64
	BlockTime      time.Time
	Deleted        bool
}

func (*BadBlocks) GetNeedToBanNodes

func (r *BadBlocks) GetNeedToBanNodes(now time.Time, blocksPerNode int) ([]BanRequests, error)

GetNeedToBanNodes is returns list of ban requests for each node

func (*BadBlocks) GetNodeBlocks

func (r *BadBlocks) GetNodeBlocks(nodeId int64, now time.Time) ([]BadBlocks, error)

func (BadBlocks) TableName

func (r BadBlocks) TableName() string

TableName returns name of table

type BanRequests

type BanRequests struct {
	ProducerNodeId int64
	Count          int64
}

BanRequests represents count of unique ban requests for node

type BatchModel

type BatchModel interface {
	TableName() string
	FieldValue(fieldName string) (interface{}, error)
}

BatchModel allows bulk insert on BatchModel slice

type Binary

type Binary struct {
	ID       int64
	Name     string
	Data     []byte
	Hash     string
	MimeType string
	// contains filtered or unexported fields
}

Binary represents record of {prefix}_binaries table

func (*Binary) Get

func (b *Binary) Get(appID, memberID int64, name string) (bool, error)

Get is retrieving model from database

func (*Binary) GetByID

func (b *Binary) GetByID(id int64) (bool, error)

GetByID is retrieving model from db by id

func (b *Binary) Link() string

Link returns link to binary data

func (*Binary) SetTableName

func (b *Binary) SetTableName(tableName string)

SetTableName sets name of table

func (*Binary) SetTablePrefix

func (b *Binary) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*Binary) TableName

func (b *Binary) TableName() string

TableName returns name of table

type Block

type Block struct {
	ID            int64  `gorm:"primary_key;not_null"`
	Hash          []byte `gorm:"not null"`
	RollbacksHash []byte `gorm:"not null"`
	Data          []byte `gorm:"not null"`
	EcosystemID   int64  `gorm:"not null"`
	KeyID         int64  `gorm:"not null"`
	NodePosition  int64  `gorm:"not null"`
	Time          int64  `gorm:"not null"`
	Tx            int32  `gorm:"not null"`
}

Block is model

func GetBlockchain

func GetBlockchain(startBlockID int64, endblockID int64) ([]Block, error)

GetBlockchain is retrieving chain of blocks from database

func (*Block) Create

func (b *Block) Create(transaction *DbTransaction) error

Create is creating record of model

func (*Block) DeleteById

func (b *Block) DeleteById(transaction *DbTransaction, id int64) error

DeleteById is deleting block by ID

func (*Block) Get

func (b *Block) Get(blockID int64) (bool, error)

Get is retrieving model from database

func (*Block) GetBlocks

func (b *Block) GetBlocks(startFromID int64, limit int32) ([]Block, error)

GetBlocks is retrieving limited chain of blocks from database

func (*Block) GetBlocksFrom

func (b *Block) GetBlocksFrom(startFromID int64, ordering string, limit int32) ([]Block, error)

GetBlocksFrom is retrieving ordered chain of blocks from database

func (*Block) GetMaxBlock

func (b *Block) GetMaxBlock() (bool, error)

GetMaxBlock returns last block existence

func (*Block) GetMaxForeignBlock

func (b *Block) GetMaxForeignBlock(keyId int64) (bool, error)

GetMaxForeignBlock returns last block generated not by key_id

func (*Block) GetNodeBlocksAtTime

func (b *Block) GetNodeBlocksAtTime(from, to time.Time, node int64) ([]Block, error)

GetNodeBlocksAtTime returns records of blocks for time interval and position of node

func (*Block) GetReverseBlockchain

func (b *Block) GetReverseBlockchain(endBlockID int64, limit int32) ([]Block, error)

GetReverseBlockchain returns records of blocks in reverse ordering

func (Block) TableName

func (Block) TableName() string

TableName returns name of table

type BlockInterface

type BlockInterface struct {
	ID         int64  `gorm:"primary_key;not null" json:"id"`
	Name       string `gorm:"not null" json:"name"`
	Value      string `gorm:"not null" json:"value"`
	Conditions string `gorm:"not null" json:"conditions"`
	// contains filtered or unexported fields
}

BlockInterface is model

func (*BlockInterface) Get

func (bi *BlockInterface) Get(name string) (bool, error)

Get is retrieving model from database

func (*BlockInterface) SetTablePrefix

func (bi *BlockInterface) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (BlockInterface) TableName

func (bi BlockInterface) TableName() string

TableName returns name of table

type Confirmation

type Confirmation struct {
	BlockID int64 `gorm:"primary_key"`
	Good    int32 `gorm:"not null"`
	Bad     int32 `gorm:"not null"`
	Time    int32 `gorm:"not null"`
}

Confirmation is model

func (*Confirmation) GetConfirmation

func (c *Confirmation) GetConfirmation(blockID int64) (bool, error)

GetConfirmation returns if block with blockID exists

func (*Confirmation) GetGoodBlock

func (c *Confirmation) GetGoodBlock(goodCount int) (bool, error)

GetGoodBlock returns last good block

func (*Confirmation) Save

func (c *Confirmation) Save() error

Save is saving model

type Cron

type Cron struct {
	ID       int64
	Cron     string
	Contract string
	// contains filtered or unexported fields
}

Cron represents record of {prefix}_cron table

func (*Cron) Get

func (c *Cron) Get(id int64) (bool, error)

Get is retrieving model from database

func (*Cron) GetAllCronTasks

func (c *Cron) GetAllCronTasks() ([]*Cron, error)

GetAllCronTasks is returning all cron tasks

func (*Cron) SetTablePrefix

func (c *Cron) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*Cron) TableName

func (c *Cron) TableName() string

TableName returns name of table

func (*Cron) UID

func (c *Cron) UID() string

UID returns unique identifier for cron task

type DbTransaction

type DbTransaction struct {
	// contains filtered or unexported fields
}

DbTransaction is gorm.DB wrapper

func StartTransaction

func StartTransaction() (*DbTransaction, error)

StartTransaction is beginning transaction

func (*DbTransaction) Commit

func (tr *DbTransaction) Commit() error

Commit is transaction commit

func (*DbTransaction) Connection

func (tr *DbTransaction) Connection() *gorm.DB

Connection returns connection of database

func (*DbTransaction) ReleaseSavepoint

func (tr *DbTransaction) ReleaseSavepoint(idTx int) error

ReleaseSavepoint releases PostgreSQL savepoint

func (*DbTransaction) Rollback

func (tr *DbTransaction) Rollback()

Rollback is transaction rollback

func (*DbTransaction) RollbackSavepoint

func (tr *DbTransaction) RollbackSavepoint(idTx int) error

RollbackSavepoint rollbacks PostgreSQL savepoint

func (*DbTransaction) Savepoint

func (tr *DbTransaction) Savepoint(idTx int) error

Savepoint creates PostgreSQL savepoint

type DelayedContract

type DelayedContract struct {
	ID         int64  `gorm:"primary_key;not null"`
	Contract   string `gorm:"not null"`
	KeyID      int64  `gorm:"not null"`
	EveryBlock int64  `gorm:"not null"`
	BlockID    int64  `gorm:"not null"`
	Counter    int64  `gorm:"not null"`
	Limit      int64  `gorm:"not null"`
	Delete     bool   `gorm:"not null"`
	Conditions string `gorm:"not null"`
}

DelayedContract represents record of 1_delayed_contracts table

func GetAllDelayedContractsForBlockID

func GetAllDelayedContractsForBlockID(blockID int64) ([]*DelayedContract, error)

GetAllDelayedContractsForBlockID returns contracts that want to execute for blockID

func (DelayedContract) TableName

func (DelayedContract) TableName() string

TableName returns name of table

type Ecosystem

type Ecosystem struct {
	ID       int64 `gorm:"primary_key;not null"`
	Name     string
	IsValued bool
}

Ecosystem is model

func (*Ecosystem) Delete

func (sys *Ecosystem) Delete(transaction *DbTransaction) error

Delete is deleting record

func (*Ecosystem) Get

func (sys *Ecosystem) Get(id int64) (bool, error)

Get is fill reciever from db

func (*Ecosystem) TableName

func (sys *Ecosystem) TableName() string

TableName returns name of table only first ecosystem has this entity

type EcosystemTx

type EcosystemTx struct {
	UnixTime  int64
	Ecosystem string
	Count     int64
}

EcosystemTx represents value of metric

func GetEcosystemTxPerDay

func GetEcosystemTxPerDay() ([]*EcosystemTx, error)

GetEcosystemTxPerDay returns the count of transactions per day for ecosystems, processes data for two days

type History

type History struct {
	ID          int64
	SenderID    int64
	RecipientID int64
	Amount      decimal.Decimal
	Comment     string
	BlockID     int64
	TxHash      []byte `gorm:"column:txhash"`
	CreatedAt   time.Time
	// contains filtered or unexported fields
}

History represent record of history table

func (*History) SetTablePrefix

func (h *History) SetTablePrefix(prefix int64) *History

SetTablePrefix is setting table prefix

func (*History) TableName

func (h *History) TableName() string

TableName returns table name

type InfoBlock

type InfoBlock struct {
	Hash           []byte `gorm:"not null"`
	EcosystemID    int64  `gorm:"not null default 0"`
	KeyID          int64  `gorm:"not null default 0"`
	NodePosition   string `gorm:"not null default 0"`
	BlockID        int64  `gorm:"not null"`
	Time           int64  `gorm:"not null"`
	CurrentVersion string `gorm:"not null"`
	Sent           int8   `gorm:"not null"`
}

InfoBlock is model

func BlockGetUnsent

func BlockGetUnsent() (*InfoBlock, error)

BlockGetUnsent returns InfoBlock

func (*InfoBlock) Create

func (ib *InfoBlock) Create(transaction *DbTransaction) error

Create is creating record of model

func (*InfoBlock) Get

func (ib *InfoBlock) Get() (bool, error)

Get is retrieving model from database

func (*InfoBlock) GetUnsent

func (ib *InfoBlock) GetUnsent() (bool, error)

GetUnsent is retrieving model from database

func (*InfoBlock) MarkSent

func (ib *InfoBlock) MarkSent() error

MarkSent update model sent field

func (*InfoBlock) TableName

func (ib *InfoBlock) TableName() string

TableName returns name of table

func (*InfoBlock) Update

func (ib *InfoBlock) Update(transaction *DbTransaction) error

Update is update model

type Install

type Install struct {
	Progress string `gorm:"not null;size:10"`
}

Install is model

func (*Install) Create

func (i *Install) Create() error

Create is creating record of model

func (*Install) Get

func (i *Install) Get() error

Get is retrieving model from database

func (*Install) TableName

func (i *Install) TableName() string

TableName returns name of table

type Key

type Key struct {
	ID        int64  `gorm:"primary_key;not null"`
	PublicKey []byte `gorm:"column:pub;not null"`
	Amount    string `gorm:"not null"`
	Maxpay    string `gorm:"not null"`
	Deleted   int64  `gorm:"not null"`
	Blocked   int64  `gorm:"not null"`
	// contains filtered or unexported fields
}

Key is model

func (*Key) Get

func (m *Key) Get(wallet int64) (bool, error)

Get is retrieving model from database

func (*Key) SetTablePrefix

func (m *Key) SetTablePrefix(prefix int64) *Key

SetTablePrefix is setting table prefix

func (Key) TableName

func (m Key) TableName() string

TableName returns name of table

type Language

type Language struct {
	ID         int64  `gorm:"primary_key;not null"`
	AppID      int64  `gorm:"column:app_id;not null"`
	Name       string `gorm:"not null;size:100"`
	Res        string `gorm:"type:jsonb(PostgreSQL)"`
	Conditions string `gorm:"not null"`
	// contains filtered or unexported fields
}

Language is model

func (*Language) GetAll

func (l *Language) GetAll(prefix string) ([]Language, error)

GetAll is retrieving all records from database

func (*Language) SetTablePrefix

func (l *Language) SetTablePrefix(tablePrefix string)

SetTablePrefix is setting table prefix

func (*Language) TableName

func (l *Language) TableName() string

TableName returns name of table

func (*Language) ToMap

func (l *Language) ToMap() map[string]string

ToMap is converting model to map

type ListResult

type ListResult struct {
	// contains filtered or unexported fields
}

ListResult is a structure for the list result

func GetList

func GetList(query string, args ...interface{}) *ListResult

GetList returns the result of the query as ListResult variable

func (*ListResult) String

func (r *ListResult) String() ([]string, error)

String return the slice of strings

type LogTransaction

type LogTransaction struct {
	Hash []byte `gorm:"primary_key;not null"`
	Time int64  `gorm:"not null"`
}

LogTransaction is model

func (*LogTransaction) Create

func (lt *LogTransaction) Create(transaction *DbTransaction) error

Create is creating record of model

func (*LogTransaction) GetByHash

func (lt *LogTransaction) GetByHash(hash []byte) (bool, error)

GetByHash returns LogTransactions existence by hash

type Member

type Member struct {
	ID         int64  `gorm:"primary_key;not null"`
	MemberName string `gorm:"not null"`
	ImageID    *int64
	MemberInfo string `gorm:"type:jsonb(PostgreSQL)"`
	// contains filtered or unexported fields
}

Member represents a ecosystem member

func (*Member) Count

func (m *Member) Count() (count int64, err error)

Count returns count of records in table

func (*Member) Get

func (m *Member) Get(id int64) (bool, error)

Get init m as member with ID

func (*Member) SetTablePrefix

func (m *Member) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*Member) TableName

func (m *Member) TableName() string

TableName returns name of table

type Menu struct {
	ID         int64  `gorm:"primary_key;not null" json:"id"`
	Name       string `gorm:"not null" json:"name"`
	Title      string `gorm:"not null" json:"title"`
	Value      string `gorm:"not null" json:"value"`
	Conditions string `gorm:"not null" json:"conditions"`
	// contains filtered or unexported fields
}

Menu is model

func (m *Menu) Get(name string) (bool, error)

Get is retrieving model from database

func (m *Menu) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (m Menu) TableName() string

TableName returns name of table

type Metric

type Metric struct {
	ID     int64  `gorm:"primary_key;not null"`
	Time   int64  `gorm:"not null"`
	Metric string `gorm:"not null"`
	Key    string `gorm:"not null"`
	Value  int64  `gorm:"not null"`
}

Metric represents record of system_metrics table

func (Metric) TableName

func (Metric) TableName() string

TableName returns name of table

type MigrationHistory

type MigrationHistory struct {
	ID          int64  `gorm:"primary_key;not null"`
	Version     string `gorm:"not null"`
	DateApplied int64  `gorm:"not null"`
}

MigrationHistory is model

func (*MigrationHistory) ApplyMigration

func (mh *MigrationHistory) ApplyMigration(version, query string) error

ApplyMigration executes database schema and writes migration history

func (*MigrationHistory) CurrentVersion

func (mh *MigrationHistory) CurrentVersion() (string, error)

CurrentVersion returns current version of database migrations

func (*MigrationHistory) TableName

func (mh *MigrationHistory) TableName() string

TableName returns name of table

type NodeBanLogs

type NodeBanLogs struct {
	ID       int64
	BannedAt time.Time
	BanTime  time.Duration
	Reason   string
}

func (NodeBanLogs) TableName

func (r NodeBanLogs) TableName() string

TableName returns name of table

type Notification

type Notification struct {
	ID                  int64  `gorm:"primary_key;not null"`
	Recipient           string `gorm:"type:jsonb(PostgreSQL)`
	Sender              string `gorm:"type:jsonb(PostgreSQL)`
	Notification        string `gorm:"type:jsonb(PostgreSQL)`
	PageParams          string `gorm:"type:jsonb(PostgreSQL)`
	ProcessingInfo      string `gorm:"type:jsonb(PostgreSQL)`
	PageName            string `gorm:"size:255"`
	DateCreated         int64
	DateStartProcessing int64
	DateClosed          int64
	Closed              bool
	// contains filtered or unexported fields
}

Notification structure

func (*Notification) SetTablePrefix

func (n *Notification) SetTablePrefix(tablePrefix string)

SetTablePrefix set table Prefix

func (*Notification) TableName

func (n *Notification) TableName() string

TableName returns table name

type OneRow

type OneRow struct {
	// contains filtered or unexported fields
}

OneRow is storing one row result

func GetOneRow

func GetOneRow(query string, args ...interface{}) *OneRow

GetOneRow returns one row

func GetOneRowTransaction

func GetOneRowTransaction(transaction *DbTransaction, query string, args ...interface{}) *OneRow

GetOneRowTransaction returns one row from transactions

func (*OneRow) Bytes

func (r *OneRow) Bytes() (map[string][]byte, error)

Bytes is extracts result from OneRow as []byte

func (*OneRow) Float64

func (r *OneRow) Float64() (map[string]float64, error)

Float64 is extracts result from OneRow as float64

func (*OneRow) Int

func (r *OneRow) Int() (map[string]int, error)

Int is extracts result from OneRow as int

func (*OneRow) Int64

func (r *OneRow) Int64() (map[string]int64, error)

Int64 is extracts result from OneRow as int64

func (*OneRow) String

func (r *OneRow) String() (map[string]string, error)

String is extracts result from OneRow as string

type Page

type Page struct {
	ID            int64  `gorm:"primary_key;not null" json:"id"`
	Name          string `gorm:"not null" json:"name"`
	Value         string `gorm:"not null" json:"value"`
	Menu          string `gorm:"not null;size:255" json:"menu"`
	ValidateCount int64  `gorm:"not null" json:"nodesCount"`
	AppID         int64  `gorm:"column:app_id;not null" json:"app_id"`
	Conditions    string `gorm:"not null" json:"conditions"`
	// contains filtered or unexported fields
}

Page is model

func (*Page) Count

func (p *Page) Count() (count int64, err error)

Count returns count of records in table

func (*Page) Get

func (p *Page) Get(name string) (bool, error)

Get is retrieving model from database

func (*Page) SetTablePrefix

func (p *Page) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*Page) TableName

func (p *Page) TableName() string

TableName returns name of table

type QueueBlock

type QueueBlock struct {
	Hash       []byte `gorm:"primary_key;not null"`
	BlockID    int64  `gorm:"not null"`
	FullNodeID int64  `gorm:"not null"`
}

QueueBlock is model

func (*QueueBlock) Create

func (qb *QueueBlock) Create() error

Create is creating record of model

func (*QueueBlock) Delete

func (qb *QueueBlock) Delete() error

Delete is deleting queue

func (*QueueBlock) DeleteOldBlocks

func (qb *QueueBlock) DeleteOldBlocks() error

DeleteOldBlocks is deleting old blocks

func (*QueueBlock) DeleteQueueBlockByHash

func (qb *QueueBlock) DeleteQueueBlockByHash() error

DeleteQueueBlockByHash is deleting queue by hash

func (*QueueBlock) Get

func (qb *QueueBlock) Get() (bool, error)

Get is retrieving model from database

func (*QueueBlock) GetQueueBlockByHash

func (qb *QueueBlock) GetQueueBlockByHash(hash []byte) (bool, error)

GetQueueBlockByHash is retrieving blocks queue by hash

type QueueTx

type QueueTx struct {
	Hash     []byte `gorm:"primary_key;not null"`
	Data     []byte `gorm:"not null"`
	FromGate int    `gorm:"not null"`
}

QueueTx is model

func GetAllUnverifiedAndUnusedTransactions

func GetAllUnverifiedAndUnusedTransactions() ([]*QueueTx, error)

GetAllUnverifiedAndUnusedTransactions is returns all unverified and unused transaction

func (*QueueTx) Create

func (qt *QueueTx) Create() error

Create is creating record of model

func (*QueueTx) DeleteTx

func (qt *QueueTx) DeleteTx(transaction *DbTransaction) error

DeleteTx is deleting tx

func (QueueTx) FieldValue

func (qt QueueTx) FieldValue(fieldName string) (interface{}, error)

FieldValue implementing BatchModel interface

func (*QueueTx) GetByHash

func (qt *QueueTx) GetByHash(transaction *DbTransaction, hash []byte) (bool, error)

GetByHash is retrieving model from database by hash

func (*QueueTx) Save

func (qt *QueueTx) Save(transaction *DbTransaction) error

Save is saving model

func (*QueueTx) TableName

func (qt *QueueTx) TableName() string

TableName returns name of table

type RolesParticipants

type RolesParticipants struct {
	Id          int64
	Role        string `gorm:"type":jsonb(PostgreSQL)`
	Member      string `gorm:"type":jsonb(PostgreSQL)`
	Appointed   string `gorm:"type":jsonb(PostgreSQL)`
	DateCreated time.Time
	DateDeleted time.Time
	Deleted     bool
	// contains filtered or unexported fields
}

RolesParticipants represents record of {prefix}roles_participants table

func (*RolesParticipants) GetActiveMemberRoles

func (r *RolesParticipants) GetActiveMemberRoles(memberID int64) ([]RolesParticipants, error)

GetActiveMemberRoles returns active assigned roles for memberID

func (*RolesParticipants) SetTablePrefix

func (r *RolesParticipants) SetTablePrefix(prefix int64) *RolesParticipants

SetTablePrefix is setting table prefix

func (RolesParticipants) TableName

func (r RolesParticipants) TableName() string

TableName returns name of table

type RollbackTx

type RollbackTx struct {
	ID        int64  `gorm:"primary_key;not null" json:"-"`
	BlockID   int64  `gorm:"not null" json:"block_id"`
	TxHash    []byte `gorm:"not null" json:"tx_hash"`
	NameTable string `gorm:"not null;size:255;column:table_name" json:"table_name"`
	TableID   string `gorm:"not null;size:255" json:"table_id"`
	Data      string `gorm:"not null;type:jsonb(PostgreSQL)" json:"data"`
}

RollbackTx is model

func (*RollbackTx) Create

func (rt *RollbackTx) Create(transaction *DbTransaction) error

Create is creating record of model

func (*RollbackTx) DeleteByHash

func (rt *RollbackTx) DeleteByHash(dbTransaction *DbTransaction) error

DeleteByHash is deleting rollbackTx by hash

func (*RollbackTx) DeleteByHashAndTableName

func (rt *RollbackTx) DeleteByHashAndTableName(transaction *DbTransaction) error

DeleteByHashAndTableName is deleting tx by hash and table name

func (*RollbackTx) Get

func (rt *RollbackTx) Get(dbTransaction *DbTransaction, transactionHash []byte, tableName string) (bool, error)

Get is retrieving model from database

func (*RollbackTx) GetBlockRollbackTransactions

func (rt *RollbackTx) GetBlockRollbackTransactions(dbTransaction *DbTransaction, blockID int64) ([]RollbackTx, error)

GetBlockRollbackTransactions returns records of rollback by blockID

func (*RollbackTx) GetRollbackTransactions

func (rt *RollbackTx) GetRollbackTransactions(dbTransaction *DbTransaction, transactionHash []byte) ([]map[string]string, error)

GetRollbackTransactions is returns rollback transactions

func (*RollbackTx) GetRollbackTxsByTableIDAndTableName

func (rt *RollbackTx) GetRollbackTxsByTableIDAndTableName(tableID, tableName string, limit int) (*[]RollbackTx, error)

GetRollbackTxsByTableIDAndTableName returns records of rollback by table name and id

func (RollbackTx) TableName

func (RollbackTx) TableName() string

TableName returns name of table

type Signature

type Signature struct {
	Name       string `gorm:"primary_key;not null;size:255"`
	Value      string `gorm:"not null;type:jsonb(PostgreSQL)"`
	Conditions string `gorm:"not null"`
	// contains filtered or unexported fields
}

Signature is model

func (*Signature) Get

func (s *Signature) Get(name string) (bool, error)

Get is retrieving model from database

func (*Signature) SetTablePrefix

func (s *Signature) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*Signature) TableName

func (s *Signature) TableName() string

TableName returns name of table

type SingleResult

type SingleResult struct {
	// contains filtered or unexported fields
}

SingleResult is a structure for the single result

func Single

func Single(query string, args ...interface{}) *SingleResult

Single is retrieving single result

func (*SingleResult) Bytes

func (r *SingleResult) Bytes() ([]byte, error)

Bytes returns []byte

func (*SingleResult) Float64

func (r *SingleResult) Float64() (float64, error)

Float64 converts string to float64

func (*SingleResult) Int

func (r *SingleResult) Int() (int, error)

Int converts bytes to int

func (*SingleResult) Int64

func (r *SingleResult) Int64() (int64, error)

Int64 converts bytes to int64

func (*SingleResult) String

func (r *SingleResult) String() (string, error)

String returns string

type StateParameter

type StateParameter struct {
	ID         int64  `gorm:"primary_key;not null"`
	Name       string `gorm:"not null;size:100"`
	Value      string `gorm:"not null"`
	Conditions string `gorm:"not null"`
	// contains filtered or unexported fields
}

StateParameter is model

func (*StateParameter) Get

func (sp *StateParameter) Get(transaction *DbTransaction, name string) (bool, error)

Get is retrieving model from database

func (*StateParameter) GetAllStateParameters

func (sp *StateParameter) GetAllStateParameters() ([]StateParameter, error)

GetAllStateParameters is returning all state parameters

func (*StateParameter) SetTablePrefix

func (sp *StateParameter) SetTablePrefix(tablePrefix string)

SetTablePrefix is setting table prefix

func (*StateParameter) TableName

func (sp *StateParameter) TableName() string

TableName returns name of table

type StopDaemon

type StopDaemon struct {
	StopTime int64 `gorm:"not null"`
}

StopDaemon is model

func (*StopDaemon) Create

func (sd *StopDaemon) Create() error

Create is creating record of model

func (*StopDaemon) Delete

func (sd *StopDaemon) Delete() error

Delete is deleting record

func (*StopDaemon) Get

func (sd *StopDaemon) Get() (bool, error)

Get is retrieving model from database

func (*StopDaemon) TableName

func (sd *StopDaemon) TableName() string

TableName returns name of table

type SystemParameter

type SystemParameter struct {
	ID         int64  `gorm:"primary_key;not null;"`
	Name       string `gorm:"not null;size:255"`
	Value      string `gorm:"not null"`
	Conditions string `gorm:"not null"`
}

SystemParameter is model

func GetAllSystemParameters

func GetAllSystemParameters(transaction *DbTransaction) ([]SystemParameter, error)

GetAllSystemParameters returns all system parameters

func (*SystemParameter) Get

func (sp *SystemParameter) Get(name string) (bool, error)

Get is retrieving model from database

func (*SystemParameter) GetJSONField

func (sp *SystemParameter) GetJSONField(jsonField string, name string) (string, error)

GetJSONField returns fields as json

func (*SystemParameter) GetTransaction

func (sp *SystemParameter) GetTransaction(transaction *DbTransaction, name string) (bool, error)

GetTransaction is retrieving model from database using transaction

func (*SystemParameter) GetValueParameterByName

func (sp *SystemParameter) GetValueParameterByName(name, value string) (*string, error)

GetValueParameterByName returns value parameter by name

func (*SystemParameter) SaveArray

func (sp *SystemParameter) SaveArray(list [][]string) error

SaveArray is saving array

func (SystemParameter) TableName

func (sp SystemParameter) TableName() string

TableName returns name of table

func (*SystemParameter) ToMap

func (sp *SystemParameter) ToMap() map[string]string

ToMap is converting SystemParameter to map

func (SystemParameter) Update

func (sp SystemParameter) Update(value string) error

Update is update model

type Table

type Table struct {
	ID          int64  `gorm:"primary_key;not null"`
	Name        string `gorm:"not null;size:100"`
	Permissions string `gorm:"not null;type:jsonb(PostgreSQL)"`
	Columns     string `gorm:"not null"`
	Conditions  string `gorm:"not null"`
	AppID       int64  `gorm:"not null"`
	// contains filtered or unexported fields
}

Table is model

func (*Table) Create

func (t *Table) Create(transaction *DbTransaction) error

Create is creating record of model

func (*Table) Delete

func (t *Table) Delete(transaction *DbTransaction) error

Delete is deleting model from database

func (*Table) ExistsByName

func (t *Table) ExistsByName(transaction *DbTransaction, name string) (bool, error)

ExistsByName finding table existence by name

func (*Table) Get

func (t *Table) Get(transaction *DbTransaction, name string) (bool, error)

Get is retrieving model from database

func (*Table) GetAll

func (t *Table) GetAll(prefix string) ([]Table, error)

GetAll returns all tables

func (*Table) GetColumns

func (t *Table) GetColumns(transaction *DbTransaction, name, jsonKey string) (map[string]string, error)

GetColumns returns columns from database

func (*Table) GetPermissions

func (t *Table) GetPermissions(transaction *DbTransaction, name, jsonKey string) (map[string]string, error)

GetPermissions returns table permissions by name

func (*Table) IsExistsByPermissionsAndTableName

func (t *Table) IsExistsByPermissionsAndTableName(transaction *DbTransaction, columnName, tableName string) (bool, error)

IsExistsByPermissionsAndTableName returns columns existence by permission and table name

func (*Table) SetTablePrefix

func (t *Table) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*Table) TableName

func (t *Table) TableName() string

TableName returns name of table

type TableVDE

type TableVDE struct {
	ID          int64  `gorm:"primary_key;not null"`
	Name        string `gorm:"not null;size:100"`
	Permissions string `gorm:"not null;type:jsonb(PostgreSQL)"`
	Columns     string `gorm:"not null"`
	Conditions  string `gorm:"not null"`
	AppID       int64  `gorm:"not null"`
	// contains filtered or unexported fields
}

TableVDE is model

func (*TableVDE) Create

func (t *TableVDE) Create(transaction *DbTransaction) error

Create is creating record of model

func (*TableVDE) SetTablePrefix

func (t *TableVDE) SetTablePrefix(prefix string)

SetTablePrefix is setting table prefix

func (*TableVDE) TableName

func (t *TableVDE) TableName() string

TableName returns name of table

type Transaction

type Transaction struct {
	Hash     []byte          `gorm:"private_key;not null"`
	Data     []byte          `gorm:"not null"`
	Used     int8            `gorm:"not null"`
	HighRate transactionRate `gorm:"not null"`
	Type     int8            `gorm:"not null"`
	KeyID    int64           `gorm:"not null"`
	Counter  int8            `gorm:"not null"`
	Sent     int8            `gorm:"not null"`
	Attempt  int8            `gorm:"not null"`
	Verified int8            `gorm:"not null;default:1"`
}

Transaction is model

func GetAllUnusedTransactions

func GetAllUnusedTransactions(limit int) ([]*Transaction, error)

GetAllUnusedTransactions is retrieving all unused transactions

func (*Transaction) Create

func (t *Transaction) Create() error

Create is creating record of model

func (*Transaction) Get

func (t *Transaction) Get(transactionHash []byte) (bool, error)

Get is retrieving model from database

func (*Transaction) GetVerified

func (t *Transaction) GetVerified(transactionHash []byte) (bool, error)

GetVerified is checking transaction verification by hash

func (*Transaction) Read

func (t *Transaction) Read(hash []byte) (bool, error)

Read is checking transaction existence by hash

type TransactionStatus

type TransactionStatus struct {
	Hash     []byte `gorm:"primary_key;not null"`
	Time     int64  `gorm:"not null;"`
	Type     int64  `gorm:"not null"`
	WalletID int64  `gorm:"not null"`
	BlockID  int64  `gorm:"not null"`
	Error    string `gorm:"not null;size 255"`
}

TransactionStatus is model

func (*TransactionStatus) Create

func (ts *TransactionStatus) Create() error

Create is creating record of model

func (*TransactionStatus) Get

func (ts *TransactionStatus) Get(transactionHash []byte) (bool, error)

Get is retrieving model from database

func (*TransactionStatus) SetError

func (ts *TransactionStatus) SetError(transaction *DbTransaction, errorText string, transactionHash []byte) error

SetError is updating transaction status error

func (*TransactionStatus) TableName

func (ts *TransactionStatus) TableName() string

TableName returns name of table

func (*TransactionStatus) UpdateBlockID

func (ts *TransactionStatus) UpdateBlockID(transaction *DbTransaction, newBlockID int64, transactionHash []byte) error

UpdateBlockID is updating block id

func (*TransactionStatus) UpdateBlockMsg

func (ts *TransactionStatus) UpdateBlockMsg(transaction *DbTransaction, newBlockID int64, msg string, transactionHash []byte) error

UpdateBlockMsg is updating block msg

Directories

Path Synopsis
MIT License
MIT License

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL