The library has been tested using Agda version <IP_ADDRESS>.
Highlights
-
New function hierarchy.
-
New (homo/mono/iso)morphism infrastructure for algebraic and relational structures.
-
Fresh lists.
-
First proofs of algebraic properties for operations over ℚ.
-
Improved reduction behaviour for all decidability proofs.
Bug-fixes
-
The record
RawRing
fromAlgebra
now includes an equality relation to make it consistent with the othorRaw
bundles. - In
Relation.Binary
:IsStrictTotalOrder
now exportsisDecStrictPartialOrder
IsDecStrictPartialOrder
now re-exports the contents ofIsStrictPartialOrder
.
- Due to bug #3879 in Agda, the pattern synonyms
0F
,1F
, … added toData.Fin.Base
in version 1.1 resulted in unavoidable and undesirable behaviour when case splitting onℕ
whenData.Fin
has been imported. These pattern synonyms have therefore been moved to the new moduleData.Fin.Patterns
.
Non-backwards compatible changes
Standardisation of record hierarchies
- The modules containing the record hierarchies for algebra, binary relations,
and functions are currently inconsistently structured. For example:
- in the binary relation record hierarchy the module
Relation.Binary
exports all parts of the hierarchy, e.g.Reflexive
,IsPreorder
andPreorder
. - in contrast the algebra record hierarchy
Associative
is exported fromAlgebra.FunctionProperties
,IsSemigroup
fromAlgebra.Structures
andSemigroup
fromAlgebra
. - the function hiearchy doesn’t have a notion of
Injective
andIsInjective
at all, andInjection
is exported fromFunction.Injection
.
- in the binary relation record hierarchy the module
- Consequently all hierarchies have been re-organised to follow the
same standard pattern:
X.Core -- Contains: Rel, Op₂, Fun etc. X.Definitions -- Contains: Reflexive, Associative, Injective etc. X.Structures -- Contains: IsEquivalence, IsSemigroup, IsInjection etc. X.Bundles -- Contains: Setoid, Semigroup, Injection etc. X -- Publicly re-exports all of the above
- In
Relation.Binary
this means:- New module
Relation.Binary.Bundles
- New module
Relation.Binary.Definitions
- Fully backwards compatible.
- New module
- In
Algebra
this means:Algebra.FunctionProperties.Core
has been deprecated in favour ofAlgebra.Core
.Algebra.FunctionProperties
has been deprecated in favour ofAlgebra.Definitions
.- The contents of
Algebra
has been moved toAlgebra.Bundles
. Algebra
now re-exports the contents ofAlgebra.Definitions
andAlgebra.Structures
, not just that ofAlgebra.Bundles
.- Compatibility: Modules which previously imported both
Algebra
andAlgebra.FunctionProperties
and/orAlgebra.Structures
will need small changes. - If either ofFunctionProperties
orStructures
are explicitly parameterised by an equality relation then importAlgebra.Bundles
instead ofAlgebra
. - Otherwise just remove theFunctionProperties
andStructures
imports entirely.
New function hierarchy
- The problems with the current function hierarchy run deeper problems than the other two:
- The raw functions are wrapped in the equality-preserving
type
_⟶_
fromFunction.Equality
. As the rest of the library rarely uses such wrapped functions, it is very difficult to write code that interfaces neatly between theFunction
hierarchy and, for example, theAlgebra
hierarchy. - The hierarchy doesn’t follow the same pattern as the other record
hierarchies in the standard library, e.g.
Injective
,IsInjection
andInjection
. Coupled with point 1., anecdotally this means that people find it difficult to understand and use. - There is no way of specifying a function has a specific property
(e.g. injectivity) without specifying all the properties required
of the equality relation as well. This is in contrast to the
Relation.Binary
andAlgebra
hierarchies where it is perfectly possible to specify that for example an operation is commutative without providing all the proofs associated with the equality relation. - In many fonts the symbol
_⟶_
used for equality preserving functions is almost indistinguishable from the symbol for ordinary functions_→_
, leading to confusion when reading code.
- The raw functions are wrapped in the equality-preserving
type
- To address these problems a new standardised function hierarchy has been
created that follows the same structure found in
Relation.Binary
andAlgebra
. In particular:- The
Fun1
andFun2
fromFunction
have been moved toFunction.Core
. - The rest of the old contents of
Function
have been moved toFunction.Base
. - Added a new module
Function.Definitions
containing definitions likeInjective
,Surjective
which are parameterised by the equality relations over the domain and codomain. - Added a new module
Function.Structures
containing definitions likeIsInjection
,IsSurjection
, once again parameterised the equality relations. - New module
Function.Bundles
containing definitions likeInjection
,Surjection
which provide essentially the same top-level interface as currently exists, i.e. parameterised by setoids but hiding the function. - The module
Function
now re-exports all of the above.
- The
- For the moment the existing modules containing the old hierarchy still exist,
as not all existing functionality has been reimplemented using the new hierarchy.
However it is expected that they will be deprecated at some point in the future
when contents this transfer is complete.
Function.Equivalence Function.Equality Function.Bijection Function.Injection Function.Surjection Function.LeftInverse
-
Compatibility: As most of changes involve adding new modules, the only problem that occurs is when importing both
Function
and e.g.Function.Injection
. In this case the old and new definitions ofInjection
will clash. In the short term this can be fixed immediately by importingFunction.Base
instead ofFunction
. However in the longer term it is encouraged to migrate away fromFunction.Injection
and to use the new hierarchy instead. - Finally the propositional bundle for left inverses in
Function.Bundles
has been renamed in the new hierarchy from_↞_
to_↩_
. This is in order to make room for the new bundle for right inverse_↪_
.
Harmonizing List.All
and Vec
in their role as finite maps.
-
The function
updateAt
inData.List.Relation.Unary.All
is analogous toupdateAt
inData.Vec.Base
and hence the API for the former has been refactored to match the latter. - Added a new “points-to” relation
_[_]=_
inData.List.Relation.Unary.All
:_[_]=_ : All P xs → x ∈ xs → P x → Set _
- In
Data.List.Relation.Unary.All.Properties
the proofsupdateAt-cong
andupdateAt-updates
are now formulated in terms of the new_[_]=_
relation rather than the functionlookup
. The old proofs are available with minor variations under the nameslookup∘updateAt
andupdateAt-cong-relative
.
Other
-
Version 1.1 in the library added irrelevance to various places in the library. Unfortunately this exposed the library to several irrelevance-related bugs. The decision has therefore been taken to roll-back these additions until irrelevance is more stable. In particular it has been removed from
_%_
,_/_
,_div_
,_mod_
inData.Nat.DivMod
and fromfromℕ≤
,inject≤
inData.Fin.Base
. -
The proofs
isPreorder
andpreorder
have been moved from theSetoid
record to the moduleRelation.Binary.Properties.Setoid
. -
The function
normalize
inData.Rational.Base
has been reimplemented in terms of a direct division of the numerator and denominator by their GCD. Although less elegant than the previous implementation, it’s reduction behaviour is much easier to reason about.
Re-implementations and deprecations
Data.Bin
→ Data.Nat.Binary
- The current implementation of binary naturals in Agda has proven hard to work with.
Therefore a new, simpler implementation which avoids using
List
has been added asData.Nat.Binary
.Data.Nat.Binary Data.Nat.Binary.Base Data.Nat.Binary.Induction Data.Nat.Binary.Properties
- The old modules still exist but have been deprecated and may be removed in
some future release of the library.
Data.Bin Data.Bin.Properties
Data.Table
→ Data.Vec.Functional
- As well as having a non-standard name, the definition of
Table
inData.Table
has proved very difficult to work with due to the wrapping of the type in a record. It has therefore been renamed and reimplemented without the record wrapper as theVector
type in the new moduleData.Vec.Functional
,Data.Vec.Functional Data.Vec.Functional.Relation.Binary.Pointwise Data.Vec.Functional.Relation.Unary.All Data.Vec.Functional.Relation.Unary.Any
- The old modules still exist but have been deprecated and may be removed in
some future release of the library.
Data.Table Data.Table.Base Data.Table.Properties Data.Table.Relation.Equality
Data.BoundedVec(.Inefficient)
→ Data.Vec.Bounded
Data.BoundedVec
andData.BoundedVec.Inefficient
have been deprecated in favour ofData.Vec.Bounded
introduced in version 1.1.Data.Vec.Bounded Data.Vec.Bounded.Base
- The old modules still exist but have been deprecated and may be removed in
some future release of the library.
Data.BoundedVec Data.BoundedVec.Inefficient
Other major additions
Reflects
idiom for decidability proofs
- A version of the
Reflects
idiom, as seen in SSReflect, has been introduced inRelation.Nullary
. Some properties of it have been added in the new moduleRelation.Nullary.Reflects
. The definition is as followsdata Reflects {p} (P : Set p) : Bool → Set p where ofʸ : ( p : P) → Reflects P true ofⁿ : (¬p : ¬ P) → Reflects P false
Dec
has been redefined in terms ofReflects
.record Dec {p} (P : Set p) : Set p where constructor _because_ field does : Bool proof : Reflects P does open Dec public
which is entirely backwards compatible thanks to the introduction of the pattern synonyms in
Relation.Nullary
:pattern yes p = true because ofʸ p pattern no ¬p = false because ofⁿ ¬p
- These changes mean that decision procedures can be defined so as to provide a
boolean result that is independent of the proof that it is the correct decision.
For example, a proof of decidability of
_≤_
on natural numbers:_≤?_ : (m n : ℕ) → Dec (m ≤ n) zero ≤? n = yes z≤n suc m ≤? zero = no λ () suc m ≤? suc n with m ≤? n ... | yes p = yes (s≤s p) ... | no ¬p = no (¬p ∘ ≤-pred)
can now be rewritten as:
_≤?_ : (m n : ℕ) → Dec (m ≤ n) zero ≤? n = yes z≤n suc m ≤? zero = no λ () does (suc m ≤? suc n) = does (m ≤? n) proof (suc m ≤? suc n) with m ≤? n ... | yes p = ofʸ (s≤s p) ... | no ¬p = ofⁿ (¬p ∘ ≤-pred)
Notice that projecting the
does
field, returns a function whose reduction behaviour is identically to what we would expect of a boolean test. This has significant advantages for both performance and reasoning in situations where only a decision is required and the proof itself is not needed. - Functions and lemmas about
Dec
have been rewritten to reflect these changes.- The lemmas
map′
andmap
inRelation.Nullary.Decidable
produce theirdoes
result without any pattern matching, andisYes
matches only on thedoes
field, and not theproof
field. For example this means thatdoes (map f X?)
is definitionally equal todoes X?
. - All of the connective lemmas like
_×-dec_
have adoes
field written in terms of boolean functions like_∧_
. As well as being less strict than the previous definitions, this should improve readability when only thedoes
field is involved.
- The lemmas
-
The function
⌊_⌋
still exists to be used in conjunction withtoWitness
and similar (e.g. in proof automation), but doesn’t require the immediate evaluation of theproof
part. - The rest of the
Relation.Nullary
subtree has been updated to reflect the changes toDec
.
Other new modules
- Properties for
Semigroup
andCommutativeSemigroup
. Contains all the non-trivial 3 element permutations. Useful for equational reasoning.Algebra.Properties.Semigroup Algebra.Properties.CommutativeSemigroup
- A map interface for AVL trees.
Data.AVL.Map
- Level polymorphic versions for the bottom and top types. Useful in
getting rid of the need to use
Lift
.Data.Unit.Polymorphic Data.Unit.Polymorphic.Properties Data.Empty.Polymorphic
- Greatest common divisor and least common multiples for integers:
Data.Integer.GCD Data.Integer.LCM
- Fresh lists.
Data.List.Fresh Data.List.Fresh.Properties Data.List.Fresh.Relation.Unary.All Data.List.Fresh.Relation.Unary.All.Properties Data.List.Fresh.Relation.Unary.Any Data.List.Fresh.Relation.Unary.Any.Properties Data.List.Fresh.Membership Data.List.Fresh.Membership.Properties
- Kleene lists. Useful when needing to distinguish between empty and non-empty lists.
Data.List.Kleene Data.List.Kleene.AsList Data.List.Kleene.Base
- Predicate over lists in which every neighbouring pair of elements is related.
Useful for implementing paths in graphs.
Data.List.Relation.Unary.Linked Data.List.Relation.Unary.Linked.Properties
- Disjoint sublists.
Data.List.Relation.Binary.Sublist.Propositional.Disjoint
- Rationals whose numerator and denominator are not necessarily normalised (i.e. coprime).
Data.Rational.Unnormalised Data.Rational.Unnormalised.Properties
In this formalisation every number has an infinite number of multiple representations and that evaluation is inefficient as the top and the bottom will inevitably blow up. However they are significantly easier to reason about then the existing normalised implementation in
Data.Rational
. The new monomorphism infrastructure (see below) is used to transfer proofs from these new unnormalised rationals to the existing normalised implementation. - Basic constructions for the new funciton hierarchy.
Function.Construct.Identity Function.Construct.Composition
- New interfaces for using Haskell datatypes:
Foreign.Haskell.Coerce Foreign.Haskell.Either
- Properties of setoids.
Relation.Binary.Properties.Setoid
- Reasoning over partial setoids.
Relation.Binary.Reasoning.Base.Partial Relation.Binary.Reasoning.PartialSetoid
- Morphisms between algebraic and relational structures. See
Data.Rational.Properties
for how these can be used to easily transfer algebraic properties from unnormalised to normalised rationals.Algebra.Morphism.Definitions Algebra.Morphism.Structures Algebra.Morphism.MagmaMonomorphism Algebra.Morphism.MonoidMonomorphism Relation.Binary.Morphism Relation.Binary.Morphism.Definitions Relation.Binary.Morphism.Structures Relation.Binary.Morphism.RelMonomorphism Relation.Binary.Morphism.OrderMonomorphism
Deprecated names
The following deprecations have occurred as part of a drive to improve consistency across the library. The deprecated names still exist and therefore all existing code should still work, however use of the new names is encouraged. Although not anticipated any time soon, they may eventually be removed in some future release of the library. Automated warnings are attached to all deprecated names to discourage their use.
- In
Data.Fin
:fromℕ≤ ↦ fromℕ< fromℕ≤″ ↦ fromℕ<″
- In
Data.Fin.Properties
fromℕ≤-toℕ ↦ fromℕ<-toℕ toℕ-fromℕ≤ ↦ toℕ-fromℕ< fromℕ≤≡fromℕ≤″ ↦ fromℕ<≡fromℕ<″ toℕ-fromℕ≤″ ↦ toℕ-fromℕ<″ isDecEquivalence ↦ ≡-isDecEquivalence preorder ↦ ≡-preorder setoid ↦ ≡-setoid decSetoid ↦ ≡-decSetoid
- In
Data.Integer.Properties
:[1+m]*n≡n+m*n ↦ suc-*
- In
Data.Nat.Coprimality
:coprime-gcd ↦ coprime⇒GCD≡1 gcd-coprime ↦ GCD≡1⇒coprime
- In
Data.Nat.Properties
:+-*-suc ↦ *-suc n∸m≤n ↦ m∸n≤m
(Note that the latter will require the arguments to be reversed)
-
In
Data.Unit
the definition_≤_
is unnecessary as it is isomorphic to_≡_
and has therefore been deprecated. - In
Data.Unit.Properties
the associated proofs have therefore been renamed as follows:≤-total ↦ ≡-total _≤?_ ↦ _≟_ ≤-isPreorder ↦ ≡-isPreorder ≤-isPartialOrder ↦ ≡-isPartialOrder ≤-isTotalOrder ↦ ≡-isTotalOrder ≤-isDecTotalOrder ↦ ≡-isDecTotalOrder ≤-poset ↦ ≡-poset ≤-decTotalOrder ↦ ≡-decTotalOrder
- In
Relation.Binary.Properties.Poset
:invIsPartialOrder ↦ ≥-isPartialOrder invPoset ↦ ≥-poset strictPartialOrder ↦ <-strictPartialOrder
- In
Relation.Binary.Properties.DecTotalOrder
:strictTotalOrder ↦ <-strictTotalOrder
Other minor additions
- Added new definition to
Algebra.Bundles
:record CommutativeSemigroup c ℓ : Set (suc (c ⊔ ℓ))
- Added new definition to
Algebra.Structures
:record IsCommutativeSemigroup (∙ : Op₂ A) : Set (a ⊔ ℓ)
- The function
tail
inCodata.Stream
has a new, more general type:tail : ∀ {i} {j : Size< i} → Stream A i → Stream A j
- Added new proofs to
Data.Char.Properties
:<-isStrictPartialOrder-≈ : IsStrictPartialOrder _≈_ _<_ <-isStrictTotalOrder-≈ : IsStrictTotalOrder _≈_ _<_ <-strictPartialOrder-≈ : StrictPartialOrder 0ℓ 0ℓ 0ℓ
- Added new proofs to
Data.Fin.Properties
:∀-cons-⇔ : (P zero × Π[ P ∘ suc ]) ⇔ Π[ P ] ∃-here : P zero → ∃⟨ P ⟩ ∃-there : ∃⟨ P ∘ suc ⟩ → ∃⟨ P ⟩ ∃-toSum : ∃⟨ P ⟩ → P zero ⊎ ∃⟨ P ∘ suc ⟩ ⊎⇔∃ : (P zero ⊎ ∃⟨ P ∘ suc ⟩) ⇔ ∃⟨ P ⟩
- Added new proofs to
Data.Fin.Subset.Properties
:out⊆ : p ⊆ q → outside ∷ p ⊆ y ∷ q out⊆-⇔ : p ⊆ q ⇔ outside ∷ p ⊆ y ∷ q in⊆in : p ⊆ q → inside ∷ p ⊆ inside ∷ q in⊆in-⇔ : p ⊆ q ⇔ inside ∷ p ⊆ inside ∷ q ∃-Subset-zero : ∃⟨ P ⟩ → P [] ∃-Subset-[]-⇔ : P [] ⇔ ∃⟨ P ⟩ ∃-Subset-suc : ∃⟨ P ⟩ → ∃⟨ P ∘ (inside ∷_) ⟩ ⊎ ∃⟨ P ∘ (outside ∷_) ⟩ ∃-Subset-∷-⇔ : (∃⟨ P ∘ (inside ∷_) ⟩ ⊎ ∃⟨ P ∘ (outside ∷_) ⟩) ⇔ ∃⟨ P ⟩
- Added new constants to
Data.Integer.Base
:-1ℤ = -[1+ 0 ] 0ℤ = +0 1ℤ = +[1+ 0 ]
- Added new proofs to
Data.Integer.Properties
:*-suc : m * sucℤ n ≡ m + m * n +-isCommutativeSemigroup : IsCommutativeSemigroup _+_ *-isCommutativeSemigroup : IsCommutativeSemigroup _*_ +-commutativeSemigroup : CommutativeSemigroup 0ℓ 0ℓ *-commutativeSemigroup : CommutativeSemigroup 0ℓ 0ℓ
- Added new function to
Data.List.Base
:_ʳ++_ = flip reverseAcc
- Added new proofs to
Data.List.Properties
:filter-accept : P x → filter P? (x ∷ xs) ≡ x ∷ (filter P? xs) filter-reject : ¬ P x → filter P? (x ∷ xs) ≡ filter P? xs filter-idem : filter P? ∘ filter P? ≗ filter P? filter-++ : filter P? (xs ++ ys) ≡ filter P? xs ++ filter P? ys ʳ++-defn : xs ʳ++ ys ≡ reverse xs ++ ys ʳ++-++ : (xs ++ ys) ʳ++ zs ≡ ys ʳ++ xs ʳ++ zs ʳ++-ʳ++ : (xs ʳ++ ys) ʳ++ zs ≡ ys ʳ++ xs ++ zs length-ʳ++ : length (xs ʳ++ ys) ≡ length xs + length ys map-ʳ++ : map f (xs ʳ++ ys) ≡ map f xs ʳ++ map f ys foldr-ʳ++ : foldr f b (xs ʳ++ ys) ≡ foldl (flip f) (foldr f b ys) xs foldl-ʳ++ : foldl f b (xs ʳ++ ys) ≡ foldl f (foldr (flip f) b xs) ys
- Added new definitions to
Data.List.Relation.Binary.Lex.Core
:[]<[]-⇔ : P ⇔ [] < [] toSum : (x ∷ xs) < (y ∷ ys) → (x ≺ y ⊎ (x ≈ y × xs < ys)) ∷<∷-⇔ : (x ≺ y ⊎ (x ≈ y × xs < ys)) ⇔ (x ∷ xs) < (y ∷ ys)
- The proof
toAny
inData.List.Relation.Binary.Sublist.Heterogeneous
has a new more general type:toAny : Sublist R (a ∷ as) bs → Any (R a) bs
- Added new relations to
Data.List.Relation.Binary.Sublist.Heterogeneous
:Disjoint (τ₁ : xs ⊆ zs) (τ₂ : ys ⊆ zs) DisjointUnion (τ₁ : xs ⊆ zs) (τ₂ : ys ⊆ zs) (τ : xys ⊆ zs)
- Added new relations and definitions to
Data.List.Relation.Binary.Sublist.Setoid
:xs ⊇ ys = ys ⊆ xs xs ⊈ ys = ¬ (xs ⊆ ys) xs ⊉ ys = ¬ (xs ⊇ ys) UpperBound (τ₁ : xs ⊆ zs) (τ₂ : ys ⊆ zs) ⊆-disjoint-union : Disjoint τ σ → UpperBound τ σ
- Added new proofs to
Data.List.Relation.Binary.Sublist.Setoid.Properties
:shrinkDisjointˡ : Disjoint τ₁ τ₂ → Disjoint (⊆-trans σ τ₁) τ₂ shrinkDisjointʳ : Disjoint τ₁ τ₂ → Disjoint τ₁ (⊆-trans σ τ₂)
- Added new definitions to
Data.List.Relation.Binary.Sublist.Propositional
:separateˡ : (τ₁ : xs ⊆ zs) (τ₂ : ys ⊆ zs) → Separation τ₁ τ₂
- Added new proofs to
Data.List.Relation.Binary.Sublist.Propositional.Properties
:⊆-trans-idˡ : ⊆-trans ⊆-refl τ ≡ τ ⊆-trans-idʳ : ⊆-trans τ ⊆-refl ≡ τ ⊆-trans-assoc : ⊆-trans τ₁ (⊆-trans τ₂ τ₃) ≡ ⊆-trans (⊆-trans τ₁ τ₂) τ₃ All-resp-⊆ : (All P) Respects _⊇_ Any-resp-⊆ : (Any P) Respects _⊆_ All-resp-⊆-refl : All-resp-⊆ ⊆-refl ≗ id All-resp-⊆-trans : All-resp-⊆ (⊆-trans τ τ′) ≗ All-resp-⊆ τ ∘ All-resp-⊆ τ′ Any-resp-⊆-refl : Any-resp-⊆ ⊆-refl ≗ id Any-resp-⊆-trans : Any-resp-⊆ (⊆-trans τ τ′) ≗ Any-resp-⊆ τ′ ∘ Any-resp-⊆ τ lookup-injective : lookup τ i ≡ lookup τ j → i ≡ j
- Added new definition to
Data.List.Relation.Binary.Pointwise
:uncons : Pointwise _∼_ (x ∷ xs) (y ∷ ys) → x ∼ y × Pointwise _∼_ xs ys
- Added new definitions to
Data.List.Relation.Unary.All
:Null = All (λ _ → ⊥)
- Added new proofs to
Data.List.Relation.Unary.All.Properties
:Null⇒null : Null xs → T (null xs) null⇒Null : T (null xs) → Null xs []=-injective : pxs [ i ]= px → pxs [ i ]= qx → px ≡ qx []=lookup : (i : x ∈ xs) → pxs [ i ]= lookup pxs i []=⇒lookup : pxs [ i ]= px → lookup pxs i ≡ px lookup⇒[]= : lookup pxs i ≡ px → pxs [ i ]= px updateAt-minimal : i ≢∈ j → pxs [ i ]= px → updateAt j f pxs [ i ]= px updateAt-id-relative : f (lookup pxs i) ≡ lookup pxs i → updateAt i f pxs ≡ pxs updateAt-compose-relative : f (g (lookup pxs i)) ≡ h (lookup pxs i) → updateAt i f (updateAt i g pxs) ≡ updateAt i h pxs updateAt-commutes : i ≢∈ j → updateAt i f ∘ updateAt j g ≗ updateAt j g ∘ updateAt i f
-
The proof
All-swap
inData.List.Relation.Unary.All.Properties
has been generalised to work over_~_ : REL A B ℓ
instead of just_~_ : REL (List A) B ℓ
. - Added new definition to
Data.List.Relation.Unary.AllPairs
:uncons : AllPairs R (x ∷ xs) → All (R x) xs × AllPairs R xs
- Added new proofs to
Data.Nat.Coprimality
:coprime⇒gcd≡1 : Coprime m n → gcd m n ≡ 1 gcd≡1⇒coprime : gcd m n ≡ 1 → Coprime m n coprime-/gcd : Coprime (m / gcd m n) (n / gcd m n)
- Added new proof to
Data.Nat.Divisibility
:>⇒∤ : m > suc n → m ∤ suc n
- Added new proofs to
Data.Nat.DivMod
:/-congˡ : m ≡ n → m / o ≡ n / o /-congʳ : n ≡ o → m / n ≡ m / o /-mono-≤ : m ≤ n → o ≥ p → m / o ≤ n / p /-monoˡ-≤ : m ≤ n → m / o ≤ n / o /-monoʳ-≤ : n ≥ o → m / n ≤ m / o m≥n⇒m/n>0 : m ≥ n → m / n > 0
- Added new proofs to
Data.Nat.GCD
:gcd[m,n]≡0⇒m≡0 : gcd m n ≡ 0 → m ≡ 0 gcd[m,n]≡0⇒n≡0 : gcd m n ≡ 0 → n ≡ 0 gcd[m,n]≤n : gcd m (suc n) ≤ suc n n/gcd[m,n]≢0 : {n≢0 gcd≢0} → n / gcd m n ≢ 0 GCD-* : GCD (m * suc c) (n * suc c) (d * suc c) → GCD m n d GCD-/ : c ∣ m → c ∣ n → c ∣ d → GCD m n d → GCD (m / c) (n / c) (d / c) GCD-/gcd : GCD (m / gcd m n) (n / gcd m n) 1
- Added new proofs to
Data.Nat.Properties
:0≢1+n : 0 ≢ suc n 1+n≢n : suc n ≢ n even≢odd : 2 * m ≢ suc (2 * n) 0<1+n : 0 < suc n n<1+n : n < suc n m<m+n : n > 0 → m < m + n m<n⇒n≢0 : m < n → n ≢ 0 m<n⇒m≤1+n : m < n → m ≤ suc n m≤n⇒m<n∨m≡n : m ≤ n → m < n ⊎ m ≡ n ∀[m≤n⇒m≢o]⇒o<n : (∀ {m} → m ≤ n → m ≢ o) → n < o ∀[m<n⇒m≢o]⇒o≤n : (∀ {m} → m < n → m ≢ o) → n ≤ o +-rawMagma : RawMagma 0ℓ 0ℓ *-rawMagma : RawMagma 0ℓ 0ℓ +-0-rawMonoid : RawMonoid 0ℓ 0ℓ *-1-rawMonoid : RawMonoid 0ℓ 0ℓ *-cancelˡ-≤ : suc o * m ≤ suc o * n → m ≤ n 1+m≢m∸n : suc m ≢ m ∸ n ∸-monoʳ-< : o < n → n ≤ m → m ∸ n < m ∸ o ∸-cancelʳ-≤ : m ≤ o → o ∸ n ≤ o ∸ m → m ≤ n ∸-cancelʳ-< : o ∸ m < o ∸ n → n < m ∸-cancelˡ-≡ : n ≤ m → o ≤ m → m ∸ n ≡ m ∸ o → n ≡ o m<n⇒0<n∸m : m < n → 0 < n ∸ m m>n⇒m∸n≢0 : m > n → m ∸ n ≢ 0 ∣-∣-identityˡ : LeftIdentity 0 ∣_-_∣ ∣-∣-identityʳ : RightIdentity 0 ∣_-_∣ ∣-∣-identity : Identity 0 ∣_-_∣ m≤n+∣n-m∣ : m ≤ n + ∣ n - m ∣ m≤n+∣m-n∣ : m ≤ n + ∣ m - n ∣ m≤∣m-n∣+n : m ≤ ∣ m - n ∣ + n +-isCommutativeSemigroup : IsCommutativeSemigroup _+_ +-commutativeSemigroup : CommutativeSemigroup 0ℓ 0ℓ
- Added new bundles to
Data.String.Properties
:<-isStrictPartialOrder-≈ : IsStrictPartialOrder _≈_ _<_ <-isStrictTotalOrder-≈ : IsStrictTotalOrder _≈_ _<_ <-strictPartialOrder-≈ : StrictPartialOrder 0ℓ 0ℓ 0ℓ
- Added new functions to
Data.Rational.Base
:mkℚ+ : ∀ n d → .{d≢0 : d ≢0} → .(Coprime n d) → ℚ toℚᵘ : ℚ → ℚᵘ fromℚᵘ : ℚᵘ → ℚ
- Added new proofs to
Data.Rational.Properties
:mkℚ-cong : n₁ ≡ n₂ → d₁ ≡ d₂ → mkℚ n₁ d₁ c₁ ≡ mkℚ n₂ d₂ c₂ mkℚ+-cong : n₁ ≡ n₂ → d₁ ≡ d₂ → mkℚ+ n₁ d₁ c₁ ≡ mkℚ+ n₂ d₂ c₂ normalize-coprime : .(c : Coprime n (suc d-1)) → normalize n (suc d-1) ≡ mkℚ (+ n) d-1 c ↥-mkℚ+ : ↥ (mkℚ+ n d c) ≡ + n ↧-mkℚ+ : ↧ (mkℚ+ n d c) ≡ + d ↥-neg : ↥ (- p) ≡ - (↥ p) ↧-neg : ↧ (- p) ≡ ↧ p ↥-normalise : ↥ (normalize i n) * gcd (+ i) (+ n) ≡ + i ↧-normalise : ↧ (normalize i n) * gcd (+ i) (+ n) ≡ + n ↥-/ : ↥ (i / n) * gcd i (+ n) ≡ i ↧-/ : ↧ (i / n) * gcd i (+ n) ≡ + n ↥-+ : ↥ (p + q) * gcd (...) (...) ≡ ↥ p * ↧ q ℤ.+ ↥ q * ↧ p ↧-+ : ↧ (p + q) * gcd (...) (...) ≡ ↧ p * ↧ q ↥p/↧p≡p : ↥ p / ↧ₙ p ≡ p 0/n≡0 : 0ℤ / n ≡ 0ℚ toℚᵘ-cong : toℚᵘ Preserves _≡_ ⟶ _≃ᵘ_ toℚᵘ-injective : Injective _≡_ _≃ᵘ_ toℚᵘ fromℚᵘ-toℚᵘ : fromℚᵘ (toℚᵘ p) ≡ p toℚᵘ-homo-+ : Homomorphic₂ toℚᵘ _+_ ℚᵘ._+_ toℚᵘ-+-isRawMagmaMorphism : IsRawMagmaMorphism +-rawMagma ℚᵘ.+-rawMagma toℚᵘ toℚᵘ-+-isRawMonoidMorphism : IsRawMonoidMorphism +-rawMonoid ℚᵘ.+-rawMonoid toℚᵘ +-assoc : Associative _+_ +-comm : Commutative _+_ +-identityˡ : LeftIdentity 0ℚ _+_ +-identityʳ : RightIdentity 0ℚ _+_ +-identity : Identity 0ℚ _+_ +-isMagma : IsMagma _+_ +-isSemigroup : IsSemigroup _+_ +-0-isMonoid : IsMonoid _+_ 0ℚ +-0-isCommutativeMonoid : IsCommutativeMonoid _+_ 0ℚ +-rawMagma : RawMagma 0ℓ 0ℓ +-rawMonoid : RawMonoid 0ℓ 0ℓ +-magma : Magma 0ℓ 0ℓ +-semigroup : Semigroup 0ℓ 0ℓ +-0-monoid : Monoid 0ℓ 0ℓ +-0-commutativeMonoid : CommutativeMonoid 0ℓ 0ℓ
- Added new functions to
Data.Sum.Base
:fromInj₁ : (B → A) → A ⊎ B → A fromInj₂ : (A → B) → A ⊎ B → B
- Added new definition to
Data.These.Properties
:these-injective : these x a ≡ these y b → x ≡ y × a ≡ b
- Added new definition to
Data.Vec.Relation.Binary.Pointwise.Inductive
:uncons : Pointwise _∼_ (x ∷ xs) (y ∷ ys) → x ∼ y × Pointwise _∼_ xs ys
- Added new definition to
Data.Vec.Relation.Unary.All
:uncons : All P (x ∷ xs) → P x × All P xs
- Added new functions to
Level
.levelOfType : ∀ {a} → Set a → Level levelOfTerm : ∀ {a} {A : Set a} → A → Level
- Added new proofs to
Relation.Binary.PropositionalEquality
:isMagma : (_∙_ : Op₂ A) → IsMagma _≡_ _∙_ magma : (_∙_ : Op₂ A) → Magma a a
- Added new definition to
Relation.Binary.Structures
:record IsPartialEquivalence (_≈_ : Rel A ℓ) : Set (a ⊔ ℓ)
- Added new definition to
Relation.Binary.Bundles
:record PartialSetoid a ℓ : Set (suc (a ⊔ ℓ))
- Added new proofs to
Relation.Binary.Construct.NonStrictToStrict
:<⇒≉ : x < y → x ≉ y ≤∧≉⇒< : x ≤ y → x ≉ y → x < y <⇒≱ : Antisymmetric _≈_ _≤_ → ∀ {x y} → x < y → ¬ (y ≤ x) ≤⇒≯ : Antisymmetric _≈_ _≤_ → ∀ {x y} → x ≤ y → ¬ (y < x) ≰⇒> : Symmetric _≈_ → (_≈_ ⇒ _≤_) → Total _≤_ → ∀ {x y} → ¬ (x ≤ y) → y < x ≮⇒≥ : Symmetric _≈_ → Decidable _≈_ → _≈_ ⇒ _≤_ → Total _≤_ → ∀ {x y} → ¬ (x < y) → y ≤ x
- Each of the following modules now re-export relevant proofs and relations from the previous modules in the list.
Relation.Binary.Properties.Preorder Relation.Binary.Properties.Poset Relation.Binary.Properties.TotalOrder Relation.Binary.Properties.DecTotalOrder
- Added new relations and proofs to
Relation.Binary.Properties.Poset
:x ≥ y = y ≤ x x < y = ¬ (y ≈ x) <⇒≉ : x < y → x ≉ y ≤∧≉⇒< : x ≤ y → x ≉ y → x < y <⇒≱ : x < y → ¬ (y ≤ x) ≤⇒≯ : x ≤ y → ¬ (y < x)
- Added new proof to
Relation.Binary.Properties.TotalOrder
:≰⇒> : ¬ (x ≤ y) → y < x
- Added new proof to
Relation.Binary.Properties.DecTotalOrder
:≮⇒≥ : ¬ (x < y) → y ≤ x
- Added new proof to
Relation.Binary.PropositionalEquality
:isDecEquivalence : Decidable _≡_ → IsDecEquivalence _≡_
- Added new definitions to
Relation.Nary
:apply⊤ₙ : Π[ R ] → (vs : Product⊤ n as) → uncurry⊤ₙ n R vs applyₙ : Π[ R ] → (vs : Product n as) → uncurry⊤ₙ n R (toProduct⊤ n vs) iapply⊤ₙ : ∀[ R ] → {vs : Product⊤ n as} → uncurry⊤ₙ n R vs iapplyₙ : ∀[ R ] → {vs : Product n as} → uncurry⊤ₙ n R (toProduct⊤ n vs) Decidable : as ⇉ Set r → Set (r ⊔ ⨆ n ls) ⌊_⌋ : Decidable R → as ⇉ Set r fromWitness : (R : as ⇉ Set r) (R? : Decidable R) → ∀[ ⌊ R? ⌋ ⇒ R ] toWitness : (R : as ⇉ Set r) (R? : Decidable R) → ∀[ R ⇒ ⌊ R? ⌋ ]
- Added new definitions to
Relation.Unary
:⌊_⌋ : {P : Pred A ℓ} → Decidable P → Pred A ℓ
- Added new definitions to
Relation.Binary.Construct.Closure.Reflexive.Properties
:fromSum : a ≡ b ⊎ a ~ b → Refl _~_ a b toSum : Refl _~_ a b → a ≡ b ⊎ a ~ b ⊎⇔Refl : (a ≡ b ⊎ a ~ b) ⇔ Refl _~_ a b
- Added new definitions to
Relation.Nullary.Decidable
:dec-true : (p? : Dec P) → P → does p? ≡ true dec-false : (p? : Dec P) → ¬ P → does p? ≡ false
- Added new definition to
Relation.Nullary.Implication
:_→-reflects_ : Reflects P bp → Reflects Q bq → Reflects (P → Q) (not bp ∨ bq)
- Added new definition to
Relation.Nullary.Negation
:¬-reflects : Reflects P b → Reflects (¬ P) (not b)
- Added new definition to
Relation.Nullary.Product
:_×-reflects_ : Reflects P bp → Reflects Q bq → Reflects (P × Q) (bp ∧ bq)
- Added new definition to
Relation.Nullary.Sum
:_⊎-reflects_ : Reflects P bp → Reflects Q bq → Reflects (P ⊎ Q) (bp ∨ bq)
- The module
Size
now re-exports the built-in function:_⊔ˢ_ : Size → Size → Size


Welcome {{username}}
Home
Events
Logout
Create an event
Select a location and zipcode. Previously used locations:
{% for line in locations %}
LOCATIONS -->
{{line.location_name}}
{{line.description}}
{{line.address}}
{{line.zipcode}}
{{line.latitude}}
{{line.longitude}}
<-- LOCATIONS
{% endfor %}
Don't have a location? Register a location:


Protecting Applications¶
To help with the explanation, we will use the multi-volume GitLab application (available via a Helm chart) as a running example for this and the following sections of the documentation. In particular, we will define policies to protect this application, see the automated policy kick in, test taking a manual snapshot, deleting data, and then restoring from one of the previous snapshots. However, the below documentation also applies to all other stateful applications you might chose to install and we will call out other specialized workflows that are possible for a variety of different deployment scenarios.
Protection Overview
Policy-Based Protection¶
As you can see when you look at the main dashboard, compliance is at 0% because we have no policies defined to cover any installed applications. To fix this, please click on Namespaces card on the main dashboard. As documented earlier, this will take you to a page where you can see all stateful applications in the system and the number of workloads they are composed of:
To protect any unmanaged application, simple click Create a policy
and that will take you to the policy creation section:
Note
It is not required that a policy be created to operate at the namespace level. In fact, as can be seen from the Workloads page, policies can be restricted to a particular workload or a particular set of selectors that could apply to only a subset of the workloads available in a namespace.
Give your policy a name, add Snapshot as an action, and then set the action frequency (we recommend hourly). Once you pick a frequency, you have the option of modifying the retention schedule by simply editing the displayed numbers.
Notice that the policy creation panel automatically selected the
namespace and included all objects in this namespace as this policy
creation was initiated through the Namespaces page. You can click on
Select Objects
to obtain more granular control over labels used
within the policy if desired:
Through the judicious use of labels within your application and, in
turn as selectors (they are logically ORed together), you can create
wildcard or forward-looking policies that will apply to any addition
of workloads or applications into the given namespace. For example,
using the heritage: Tiller
selector will apply the policy you are
creating to any new Helm
-deployed application as that tool
automatically adds that label to any workload it creates.
Once you are done with policy configuration, simply hit Create
Policy
!
Viewing Policy Activity¶
Once you are back on the main dashboard, if you pay careful attention you will see both the applications and volumes sections quickly switch from unmanaged to non-compliant (i.e., a policy covers the objects but no action has been taken yet). Soon after, they will both switch to compliant as snapshots get invoked. You can also scroll down on the page to see the activity, how long each snapshot took, and the generated artifacts. Your page will now look similar to this:
More detailed job information can be obtained by clicking on the in-progress or completed jobs.
This activity can be further seen by going back to the Policies page and selecting "Snapshots schedule" for the policy you just created. It will show the following view including the protected workloads and an easy view to see compliance for a given policy's schedule.
At this point, the application is protected and you can now move on to testing manual snapshots and restores in the next section of the documentation.
Manual Protection¶
While the previous restore point created right after policy creation will work, we can also optionally experiment with taking a manual snapshot. To do so, go back to the dashboard and click on the Namespaces card. For the selected application, select the dropdown:
and then select Manually Protect Namespace
. This starts the
creation of a manual restore point and you can check the progress on
the dashboard. Once the manual snapshot has completed, you can modify
state in the selected application.
Note that you can perform the same manual action on an individual workload too or even on an application or workload that has no policy associated with it.


Hello World
Turn me into something you can be truly proud of
H1 Typography
H2 Typography
H3 Typography
H4 Typography
H5 Typography
H6 Typography
Light Typography
Regular Typography
Semi-Bold Typography
Bold Typography
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
Button
A
B
C
A1
B2
C3
A1
B2
C3
A1
B2
C3
Username
This is a required field.
Password
I agree to the Terms and Conditions
Submit
Link 1
Link 2
Link 3
Link 4
Option 1
Option 2
Media Object


A monospaced font, also called a fixed-pitch, fixed-width, or non-proportional font, is a font whose letters and characters each occupy the same amount of horizontal space. This contrasts with variable-width fonts, where the letters and spacings have different widths. For example, the two high-use letters "I" and "E" do not need the same footprint. Both letters differ in center-to-next-letter edge (and center-to-center) spacing distance needs (margins) in variable width fonts. The variable that changes is offset from what would otherwise be monospaced centering. In a modern proportional font, every dimension can be scaled and changed, but such sizing mathematically must still maintain monospacing or variable spacing.
Note that this article generally assumes Western (Latin-based, Cyrillic, or Greek) writing systems. East Asian rules of typography, for example, require CJK fonts to be always monospaced at least as far as the main characters for writing words (i.e. not punctuation) are concerned. Other scripts vary in their use of monospaced fonts.
The first monospaced Western typefaces were designed for typewriters, which could only move the same distance forward with each letter typed—simply because all striker arms on a typewriter are physically the same width or won't align and pass through the positioning gap. This also later meant that monospaced fonts need not be hand-typeset (since Gutenberg, using physical blocks) and electric motorized cam driven auto typesetters could be manufactured. Monospace fonts being the same size and spacing, unlike variable width fonts and were and are arguably, easier to deal with since everything is uniformly spaced.
Source: Monospaced Font Wikipedia


New lines are possible because of break:
All things bright and beautiful
All things great and small
The Lord God made them all

New lines are possible because of break:
All things bright and beautiful
All things great and small
The Lord God made them all


Hey, I'm Jordan. Well, the female Jordan, just to clarify. I've turned from probation officer to a noob programmer. I know, it's a little crazy. But life sometimes has fun twists and turns, right? Welcome to my portfolio. Happy to
have you here.
Want to talk? Click here to go to my contact page.


TRIBIOTICLC
LC
LC- bacitracin zinc, neomycin sulfate, polymyxin b sulfate and lidocaine ointment
HART Health
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Active Ingredients (in each gram)
Bacitracin Zinc 400 units
Neomycin Sulfate 5 mg (equivalent to 3.5mg neomycin base)
Polymyxin B Sulfate 5,000 units
Lidocaine 40mg
Keep out of reach of children. If swallowed get medical help or contact a Poison Control Center right away.
Directions:
Do not use more than directed.
Adults and children 12 years of age and over:
Children under 12 years of age: ask a doctor
|
TRIBIOTICLC
LC
LC bacitracin zinc, neomycin sulfate, polymyxin b sulfate, lidocaine ointment | ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
|
| Labeler - HART Health (069560969) |


{% if weather != None %}
{{ weather.city }}
{{ weather.temperature }}° C
{{ weather.description }}
Local Time: {{ weather.time }}
{% endif %}


Welcome to giveawaysb.cc!
These terms and conditions outline the rules and regulations for the use of Giveaways's Website, located at https://giveawaysb.cc.
By accessing this website we assume you accept these terms and conditions. Do not continue to use giveawaysb.cc if you do not agree to take all of the terms and conditions stated on this page.
The following terminology applies to these Terms and Conditions, Privacy Statement and Disclaimer Notice and all Agreements: "Client", "You" and "Your" refers to you, the person log on this website and compliant to the Company’s terms and conditions. "The Company", "Ourselves", "We", "Our" and "Us", refers to our Company. "Party", "Parties", or "Us", refers to both the Client and ourselves. All terms refer to the offer, acceptance and consideration of payment necessary to undertake the process of our assistance to the Client in the most appropriate manner for the express purpose of meeting the Client’s needs in respect of provision of the Company’s stated services, in accordance with and subject to, prevailing law of Netherlands. Any use of the above terminology or other words in the singular, plural, capitalization and/or he/she or they, are taken as interchangeable and therefore as referring to same.
Unless otherwise stated, Giveaways and/or its licensors own the intellectual property rights for all material on giveawaysb.cc. All intellectual property rights are reserved. You may access this from giveawaysb.cc for your own personal use subjected to restrictions set in these terms and conditions.
You must not:
You warrant and represent that:
You hereby grant Giveaways a non-exclusive license to use, reproduce, edit and authorize others to use, reproduce and edit any of your Comments in any and all forms, formats or media.
The following organizations may link to our Website without prior written approval:
These organizations may link to our home page, to publications or to other Website information so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products and/or services; and (c) fits within the context of the linking party’s site.
We may consider and approve other link requests from the following types of organizations:
We will approve link requests from these organizations if we decide that: (a) the link would not make us look unfavorably to ourselves or to our accredited businesses; (b) the organization does not have any negative records with us; (c) the benefit to us from the visibility of the hyperlink compensates the absence of Giveaways; and (d) the link is in the context of general resource information.
These organizations may link to our home page so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products or services; and (c) fits within the context of the linking party’s site.
If you are one of the organizations listed in paragraph 2 above and are interested in linking to our website, you must inform us by sending an e-mail to us. Please include your name, your organization name, contact information as well as the URL of your site, a list of any URLs from which you intend to link to our Website, and a list of the URLs on our site to which you would like to link. Wait 2-3 weeks for a response.
Approved organizations may hyperlink to our Website as follows:
No use of Giveaways's logo or other artwork will be allowed for linking absent a trademark license agreement.
Without prior approval and written permission, you may not create frames around our Webpages that alter in any way the visual presentation or appearance of our Website.
We shall not be hold responsible for any content that appears on your Website. You agree to protect and defend us against all claims that is rising on your Website. No link(s) should appear on any Website that may be interpreted as libelous, obscene or criminal, or which infringes, otherwise violates, or advocates the infringement or other violation of, any third party rights.
We reserve the right to request that you remove all links or any particular link to our Website. You approve to immediately remove all links to our Website upon request. We also reserve the right to amen these terms and conditions and it’s linking policy at any time. By continuously linking to our Website, you agree to be bound to and follow these linking terms and conditions.
If you find any link on our Website that is offensive for any reason, you are free to contact and inform us any moment. We will consider requests to remove links but we are not obligated to or so or to respond to you directly.
We do not ensure that the information on this website is correct, we do not warrant its completeness or accuracy; nor do we promise to ensure that the website remains available or that the material on the website is kept up to date.


Thank you for installing shortcut-cli
Open a new terminal and run the following command to get start with shortcut-cli:
$ shortcut-cli [command]
Run the following command to uninstall shortcut-cli.
$ sudo bash /Library/__PRODUCT__/__VERSION__/uninstall.sh
Copyright © 2019 Cuong Le


Simplified DES#
A simplified variant of the Data Encryption Standard (DES). Note that Simplified DES or S-DES is for educational purposes only. It is a small-scale version of the DES designed to help beginners understand the basic structure of DES.
AUTHORS:
Minh Van Nguyen (2009-06): initial version
- class sage.crypto.block_cipher.sdes.SimplifiedDES#
Bases:
SageObject
This class implements the Simplified Data Encryption Standard (S-DES) described in [Sch1996]. Schaefer’s S-DES is for educational purposes only and is not secure for practical purposes. S-DES is a version of the DES with all parameters significantly reduced, but at the same time preserving the structure of DES. The goal of S-DES is to allow a beginner to understand the structure of DES, thus laying a foundation for a thorough study of DES. Its goal is as a teaching tool in the same spirit as Phan’s
Mini-AES
[Pha2002].EXAMPLES:
Encrypt a random block of 8-bit plaintext using a random key, decrypt the ciphertext, and compare the result with the original plaintext:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES(); sdes Simplified DES block cipher with 10-bit keys sage: bin = BinaryStrings() sage: P = [bin(str(randint(0, 1))) for i in range(8)] sage: K = sdes.random_key() sage: C = sdes.encrypt(P, K) sage: plaintxt = sdes.decrypt(C, K) sage: plaintxt == P True
We can also encrypt binary strings that are larger than 8 bits in length. However, the number of bits in that binary string must be positive and a multiple of 8:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: bin = BinaryStrings() sage: P = bin.encoding("Encrypt this using S-DES!") sage: Mod(len(P), 8) == 0 True sage: K = sdes.list_to_string(sdes.random_key()) sage: C = sdes(P, K, algorithm="encrypt") sage: plaintxt = sdes(C, K, algorithm="decrypt") sage: plaintxt == P True
- block_length()#
Return the block length of Schaefer’s S-DES block cipher. A key in Schaefer’s S-DES is a block of 10 bits.
OUTPUT:
The block (or key) length in number of bits.
EXAMPLES:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: sdes.block_length() 10
- decrypt(C, K)#
Return an 8-bit plaintext corresponding to the ciphertext
C
, using S-DES decryption with keyK
. The decryption process of S-DES is as follows. Let \(P\) be the initial permutation function, \(P^{-1}\) the corresponding inverse permutation, \(\Pi_F\) the permutation/substitution function, and \(\sigma\) the switch function. The ciphertext blockC
first goes through \(P\), the output of which goes through \(\Pi_F\) using the second subkey. Then we apply the switch function to the output of the last function, and the result is then fed into \(\Pi_F\) using the first subkey. Finally, run the output through \(P^{-1}\) to get the plaintext.INPUT:
C
– an 8-bit ciphertext; a block of 8 bitsK
– a 10-bit key; a block of 10 bits
OUTPUT:
The 8-bit plaintext corresponding to
C
, obtained using the keyK
.EXAMPLES:
Decrypt an 8-bit ciphertext block:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: C = [0, 1, 0, 1, 0, 1, 0, 1] sage: K = [1, 0, 1, 0, 0, 0, 0, 0, 1, 0] sage: sdes.decrypt(C, K) [0, 0, 0, 1, 0, 1, 0, 1]
We can also work with strings of bits:
sage: C = "01010101" sage: K = "1010000010" sage: sdes.decrypt(sdes.string_to_list(C), sdes.string_to_list(K)) [0, 0, 0, 1, 0, 1, 0, 1]
- encrypt(P, K)#
Return an 8-bit ciphertext corresponding to the plaintext
P
, using S-DES encryption with keyK
. The encryption process of S-DES is as follows. Let \(P\) be the initial permutation function, \(P^{-1}\) the corresponding inverse permutation, \(\Pi_F\) the permutation/substitution function, and \(\sigma\) the switch function. The plaintext blockP
first goes through \(P\), the output of which goes through \(\Pi_F\) using the first subkey. Then we apply the switch function to the output of the last function, and the result is then fed into \(\Pi_F\) using the second subkey. Finally, run the output through \(P^{-1}\) to get the ciphertext.INPUT:
P
– an 8-bit plaintext; a block of 8 bitsK
– a 10-bit key; a block of 10 bits
OUTPUT:
The 8-bit ciphertext corresponding to
P
, obtained using the keyK
.EXAMPLES:
Encrypt an 8-bit plaintext block:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: P = [0, 1, 0, 1, 0, 1, 0, 1] sage: K = [1, 0, 1, 0, 0, 0, 0, 0, 1, 0] sage: sdes.encrypt(P, K) [1, 1, 0, 0, 0, 0, 0, 1]
We can also work with strings of bits:
sage: P = "01010101" sage: K = "1010000010" sage: sdes.encrypt(sdes.string_to_list(P), sdes.string_to_list(K)) [1, 1, 0, 0, 0, 0, 0, 1]
- initial_permutation(B, inverse=False)#
Return the initial permutation of
B
. Denote the initial permutation function by \(P\) and let \((b_0, b_1, b_2, \dots, b_7)\) be a vector of 8 bits, where each \(b_i \in \{ 0, 1 \}\). Then\[P(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7) = (b_1, b_5, b_2, b_0, b_3, b_7, b_4, b_6)\]The inverse permutation is \(P^{-1}\):
\[P^{-1}(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7) = (b_3, b_0, b_2, b_4, b_6, b_1, b_7, b_5)\]INPUT:
B
– list; a block of 8 bitsinverse
– (default:False
) ifTrue
then use the inverse permutation \(P^{-1}\); ifFalse
then use the initial permutation \(P\)
OUTPUT:
The initial permutation of
B
ifinverse=False
, or the inverse permutation ofB
ifinverse=True
.EXAMPLES:
The initial permutation of a list of 8 bits:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 0, 1, 1, 0, 1, 0, 0] sage: P = sdes.initial_permutation(B); P [0, 1, 1, 1, 1, 0, 0, 0]
Recovering the original list of 8 bits from the permutation:
sage: Pinv = sdes.initial_permutation(P, inverse=True) sage: Pinv; B [1, 0, 1, 1, 0, 1, 0, 0] [1, 0, 1, 1, 0, 1, 0, 0]
We can also work with a string of bits:
sage: S = "10110100" sage: L = sdes.string_to_list(S) sage: P = sdes.initial_permutation(L); P [0, 1, 1, 1, 1, 0, 0, 0] sage: sdes.initial_permutation(sdes.string_to_list("01111000"), inverse=True) [1, 0, 1, 1, 0, 1, 0, 0]
- left_shift(B, n=1)#
Return a circular left shift of
B
byn
positions. Let \(B = (b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9)\) be a vector of 10 bits. Then the left shift operation \(L_n\) is performed on the first 5 bits and the last 5 bits of \(B\) separately. That is, if the number of shift positions isn=1
, then \(L_1\) is defined as\[L_1(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9) = (b_1, b_2, b_3, b_4, b_0, b_6, b_7, b_8, b_9, b_5)\]If the number of shift positions is
n=2
, then \(L_2\) is given by\[L_2(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9) = (b_2, b_3, b_4, b_0, b_1, b_7, b_8, b_9, b_5, b_6)\]INPUT:
B
– a list of 10 bitsn
– (default: 1) ifn=1
then perform left shift by 1 position; ifn=2
then perform left shift by 2 positions. The valid values forn
are 1 and 2, since only up to 2 positions are defined for this circular left shift operation.
OUTPUT:
The circular left shift of each half of
B
.EXAMPLES:
Circular left shift by 1 position of a 10-bit string:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 0, 0, 0, 0, 0, 1, 1, 0, 0] sage: sdes.left_shift(B) [0, 0, 0, 0, 1, 1, 1, 0, 0, 0] sage: sdes.left_shift([1, 0, 1, 0, 0, 0, 0, 0, 1, 0]) [0, 1, 0, 0, 1, 0, 0, 1, 0, 0]
Circular left shift by 2 positions of a 10-bit string:
sage: B = [0, 0, 0, 0, 1, 1, 1, 0, 0, 0] sage: sdes.left_shift(B, n=2) [0, 0, 1, 0, 0, 0, 0, 0, 1, 1]
Here we work with a string of bits:
sage: S = "1000001100" sage: L = sdes.string_to_list(S) sage: sdes.left_shift(L) [0, 0, 0, 0, 1, 1, 1, 0, 0, 0] sage: sdes.left_shift(sdes.string_to_list("1010000010"), n=2) [1, 0, 0, 1, 0, 0, 1, 0, 0, 0]
- list_to_string(B)#
Return a binary string representation of the list
B
.INPUT:
B
– a non-empty list of bits
OUTPUT:
The binary string representation of
B
.EXAMPLES:
A binary string representation of a list of bits:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: L = [0, 0, 0, 0, 1, 1, 0, 1, 0, 0] sage: sdes.list_to_string(L)<PHONE_NUMBER>
- permutation10(B)#
Return a permutation of a 10-bit string. This permutation is called \(P_{10}\) and is specified as follows. Let \((b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9)\) be a vector of 10 bits where each \(b_i \in \{ 0, 1 \}\). Then \(P_{10}\) is given by
\[P_{10}(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9) = (b_2, b_4, b_1, b_6, b_3, b_9, b_0, b_8, b_7, b_5)\]INPUT:
B
– a block of 10-bit string
OUTPUT:
A permutation of
B
.EXAMPLES:
Permute a 10-bit string:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 1, 0, 0, 1, 0, 0, 1, 0, 1] sage: sdes.permutation10(B) [0, 1, 1, 0, 0, 1, 1, 0, 1, 0] sage: sdes.permutation10([0, 1, 1, 0, 1, 0, 0, 1, 0, 1]) [1, 1, 1, 0, 0, 1, 0, 0, 1, 0] sage: sdes.permutation10([1, 0, 1, 0, 0, 0, 0, 0, 1, 0]) [1, 0, 0, 0, 0, 0, 1, 1, 0, 0]
Here we work with a string of bits:
sage: S = "1100100101" sage: L = sdes.string_to_list(S) sage: sdes.permutation10(L) [0, 1, 1, 0, 0, 1, 1, 0, 1, 0] sage: sdes.permutation10(sdes.string_to_list("0110100101")) [1, 1, 1, 0, 0, 1, 0, 0, 1, 0]
- permutation4(B)#
Return a permutation of a 4-bit string. This permutation is called \(P_4\) and is specified as follows. Let \((b_0, b_1, b_2, b_3)\) be a vector of 4 bits where each \(b_i \in \{ 0, 1 \}\). Then \(P_4\) is defined by
\[P_4(b_0, b_1, b_2, b_3) = (b_1, b_3, b_2, b_0)\]INPUT:
B
– a block of 4-bit string
OUTPUT:
A permutation of
B
.EXAMPLES:
Permute a 4-bit string:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 1, 0, 0] sage: sdes.permutation4(B) [1, 0, 0, 1] sage: sdes.permutation4([0, 1, 0, 1]) [1, 1, 0, 0]
We can also work with a string of bits:
sage: S = "1100" sage: L = sdes.string_to_list(S) sage: sdes.permutation4(L) [1, 0, 0, 1] sage: sdes.permutation4(sdes.string_to_list("0101")) [1, 1, 0, 0]
- permutation8(B)#
Return a permutation of an 8-bit string. This permutation is called \(P_8\) and is specified as follows. Let \((b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9)\) be a vector of 10 bits where each \(b_i \in \{ 0, 1 \}\). Then \(P_8\) picks out 8 of those 10 bits and permutes those 8 bits:
\[P_8(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9) = (b_5, b_2, b_6, b_3, b_7, b_4, b_9, b_8)\]INPUT:
B
– a block of 10-bit string
OUTPUT:
Pick out 8 of the 10 bits of
B
and permute those 8 bits.EXAMPLES:
Permute a 10-bit string:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 1, 0, 0, 1, 0, 0, 1, 0, 1] sage: sdes.permutation8(B) [0, 0, 0, 0, 1, 1, 1, 0] sage: sdes.permutation8([0, 1, 1, 0, 1, 0, 0, 1, 0, 1]) [0, 1, 0, 0, 1, 1, 1, 0] sage: sdes.permutation8([0, 0, 0, 0, 1, 1, 1, 0, 0, 0]) [1, 0, 1, 0, 0, 1, 0, 0]
We can also work with a string of bits:
sage: S = "1100100101" sage: L = sdes.string_to_list(S) sage: sdes.permutation8(L) [0, 0, 0, 0, 1, 1, 1, 0] sage: sdes.permutation8(sdes.string_to_list("0110100101")) [0, 1, 0, 0, 1, 1, 1, 0]
- permute_substitute(B, key)#
Apply the function \(\Pi_F\) on the block
B
using subkeykey
. Let \((b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7)\) be a vector of 8 bits where each \(b_i \in \{ 0, 1 \}\), let \(L\) and \(R\) be the leftmost 4 bits and rightmost 4 bits ofB
respectively, and let \(F\) be a function mapping 4-bit strings to 4-bit strings. Then\[\Pi_F(L, R) = (L \oplus F(R, S), R)\]where \(S\) is a subkey and \(\oplus\) denotes the bit-wise exclusive-OR function.
The function \(F\) can be described as follows. Its 4-bit input block \((n_0, n_1, n_2, n_3)\) is first expanded into an 8-bit block to become \((n_3, n_0, n_1, n_2, n_1, n_2, n_3, n_0)\). This is usually represented as follows
\[\begin{split}\begin{tabular}{c|cc|c} $n_3$ & $n_0$ & $n_1$ & $n_2$ \\ $n_1$ & $n_2$ & $n_3$ & $n_0$ \end{tabular}\end{split}\]Let \(K = (k_0, k_1, k_2, k_3, k_4, k_5, k_6, k_7)\) be an 8-bit subkey. Then \(K\) is added to the above expanded input block using exclusive-OR to produce
\[\begin{split}\begin{tabular}{c|cc|c} $n_3 + k_0$ & $n_0 + k_1$ & $n_1 + k_2$ & $n_2 + k_3$ \\ $n_1 + k_4$ & $n_2 + k_5$ & $n_3 + k_6$ & $n_0 + k_7$ \end{tabular} = \begin{tabular}{c|cc|c} $p_{0,0}$ & $p_{0,1}$ & $p_{0,2}$ & $p_{0,3}$ \\ $p_{1,0}$ & $p_{1,1}$ & $p_{1,2}$ & $p_{1,3}$ \end{tabular}\end{split}\]Now read the first row as the 4-bit string \(p_{0,0} p_{0,3} p_{0,1} p_{0,2}\) and input this 4-bit string through S-box \(S_0\) to get a 2-bit output.
\[\begin{split}S_0 = \begin{tabular}{cc|cc} \hline Input & Output & Input & Output \\\hline 0000 & 01 & 1000 & 00 \\ 0001 & 00 & 1001 & 10 \\ 0010 & 11 & 1010 & 01 \\ 0011 & 10 & 1011 & 11 \\ 0100 & 11 & 1100 & 11 \\ 0101 & 10 & 1101 & 01 \\ 0110 & 01 & 1110 & 11 \\ 0111 & 00 & 1111 & 10 \\\hline \end{tabular}\end{split}\]Next read the second row as the 4-bit string \(p_{1,0} p_{1,3} p_{1,1} p_{1,2}\) and input this 4-bit string through S-box \(S_1\) to get another 2-bit output.
\[\begin{split}S_1 = \begin{tabular}{cc|cc} \hline Input & Output & Input & Output \\\hline 0000 & 00 & 1000 & 11 \\ 0001 & 01 & 1001 & 00 \\ 0010 & 10 & 1010 & 01 \\ 0011 & 11 & 1011 & 00 \\ 0100 & 10 & 1100 & 10 \\ 0101 & 00 & 1101 & 01 \\ 0110 & 01 & 1110 & 00 \\ 0111 & 11 & 1111 & 11 \\\hline \end{tabular}\end{split}\]Denote the 4 bits produced by \(S_0\) and \(S_1\) as \(b_0 b_1 b_2 b_3\). This 4-bit string undergoes another permutation called \(P_4\) as follows:
\[P_4(b_0, b_1, b_2, b_3) = (b_1, b_3, b_2, b_0)\]The output of \(P_4\) is the output of the function \(F\).
INPUT:
B
– a list of 8 bitskey
– an 8-bit subkey
OUTPUT:
The result of applying the function \(\Pi_F\) to
B
.EXAMPLES:
Applying the function \(\Pi_F\) to an 8-bit block and an 8-bit subkey:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 0, 1, 1, 1, 1, 0, 1] sage: K = [1, 1, 0, 1, 0, 1, 0, 1] sage: sdes.permute_substitute(B, K) [1, 0, 1, 0, 1, 1, 0, 1]
We can also work with strings of bits:
sage: B = "10111101" sage: K = "11010101" sage: B = sdes.string_to_list(B); K = sdes.string_to_list(K) sage: sdes.permute_substitute(B, K) [1, 0, 1, 0, 1, 1, 0, 1]
- random_key()#
Return a random 10-bit key.
EXAMPLES:
The size of each key is the same as the block size:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: key = sdes.random_key() sage: len(key) == sdes.block_length() True
- sbox()#
Return the S-boxes of simplified DES.
EXAMPLES:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: sbox = sdes.sbox() sage: sbox[0]; sbox[1] (1, 0, 3, 2, 3, 2, 1, 0, 0, 2, 1, 3, 3, 1, 3, 2) (0, 1, 2, 3, 2, 0, 1, 3, 3, 0, 1, 0, 2, 1, 0, 3)
- string_to_list(S)#
Return a list representation of the binary string
S
.INPUT:
S
– a string of bits
OUTPUT:
A list representation of the string
S
.EXAMPLES:
A list representation of a string of bits:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: S = "0101010110" sage: sdes.string_to_list(S) [0, 1, 0, 1, 0, 1, 0, 1, 1, 0]
- subkey(K, n=1)#
Return the
n
-th subkey based on the keyK
.INPUT:
K
– a 10-bit secret key of this Simplified DESn
– (default: 1) ifn=1
then return the first subkey based onK
; ifn=2
then return the second subkey. The valid values forn
are 1 and 2, since only two subkeys are defined for each secret key in Schaefer’s S-DES.
OUTPUT:
The
n
-th subkey based on the secret keyK
.EXAMPLES:
Obtain the first subkey from a secret key:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: key = [1, 0, 1, 0, 0, 0, 0, 0, 1, 0] sage: sdes.subkey(key, n=1) [1, 0, 1, 0, 0, 1, 0, 0]
Obtain the second subkey from a secret key:
sage: key = [1, 0, 1, 0, 0, 0, 0, 0, 1, 0] sage: sdes.subkey(key, n=2) [0, 1, 0, 0, 0, 0, 1, 1]
We can also work with strings of bits:
sage: K = "1010010010" sage: L = sdes.string_to_list(K) sage: sdes.subkey(L, n=1) [1, 0, 1, 0, 0, 1, 0, 1] sage: sdes.subkey(sdes.string_to_list("0010010011"), n=2) [0, 1, 1, 0, 1, 0, 1, 0]
- switch(B)#
Interchange the first 4 bits with the last 4 bits in the list
B
of 8 bits. Let \((b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7)\) be a vector of 8 bits, where each \(b_i \in \{ 0, 1 \}\). Then the switch function \(\sigma\) is given by\[\sigma(b_0, b_1, b_2, b_3, b_4, b_5, b_6, b_7) = (b_4, b_5, b_6, b_7, b_0, b_1, b_2, b_3)\]INPUT:
B
– list; a block of 8 bits
OUTPUT:
A block of the same dimension, but in which the first 4 bits from
B
has been switched for the last 4 bits inB
.EXAMPLES:
Interchange the first 4 bits with the last 4 bits:
sage: from sage.crypto.block_cipher.sdes import SimplifiedDES sage: sdes = SimplifiedDES() sage: B = [1, 1, 1, 0, 1, 0, 0, 0] sage: sdes.switch(B) [1, 0, 0, 0, 1, 1, 1, 0] sage: sdes.switch([1, 1, 1, 1, 0, 0, 0, 0]) [0, 0, 0, 0, 1, 1, 1, 1]
We can also work with a string of bits:
sage: S = "11101000" sage: L = sdes.string_to_list(S) sage: sdes.switch(L) [1, 0, 0, 0, 1, 1, 1, 0] sage: sdes.switch(sdes.string_to_list("11110000")) [0, 0, 0, 0, 1, 1, 1, 1]


|
Bitstream Interpretation Library (BIL)
0.1
|
Visitor for checking syntax of a Virtex-5 bitstream. More...
#include <bitstream/V5BitstreamSyntaxChecker.hpp>
Public Member Functions | |
| V5BitstreamSyntaxChecker () | |
| bool | behindSyncWord () const |
| Tells, if sync word was passed. | |
| bool | lastPacketWasType1 () const |
| Tells, if the last packet processed was a type 1 packet. | |
| RegisterAddress::address_t | lastType1Address () const |
| Gets the register address of the last processed type 1 packet. | |
| virtual void | reset () |
| Resets the internal state. | |
| virtual void | visit (const BuswidthPattern &buswidthPattern) |
| Visits a BuswidthPattern packet. | |
| virtual void | visit (const DummyWord &dummyWord) |
| Visits a DummyWord packet. | |
| virtual void | visit (const SyncWord &syncWord) |
| Visits a SyncWord packet. | |
| virtual void | visit (const Type1Packet &type1Packet) |
| Visits a Type1Packet packet. | |
| virtual void | visit (const Type2Packet &type2Packet) |
| Visits a Type2Packet packet. | |
| Public Member Functions inherited from bil::V5PacketVisitor | |
| virtual void | visit (const Packet &packet) |
| Irrelevant visit() method for Virtex-5 bitstreams. | |
| Public Member Functions inherited from bil::PacketVisitor | |
| virtual | ~PacketVisitor () |
Visitor for checking syntax of a Virtex-5 bitstream.
A Packet visitor that checks the syntactical correctness of a Virtex-5 bitstream. That means, that the packets have to be in the right order and number, and have to be of types that are valid for Virtex-5 bitstreams. Every time a packet is given to a V5BitstreamSyntaxChecker instance, it updates its state. In case of a syntax error it throws an exception.
Definition at line 24 of file V5BitstreamSyntaxChecker.hpp.
| V5BitstreamSyntaxChecker::V5BitstreamSyntaxChecker | ( | ) |
Definition at line 12 of file V5BitstreamSyntaxChecker.cpp.
| bool V5BitstreamSyntaxChecker::behindSyncWord | ( | ) | const |
Tells, if sync word was passed.
Definition at line 18 of file V5BitstreamSyntaxChecker.cpp.
| bool V5BitstreamSyntaxChecker::lastPacketWasType1 | ( | ) | const |
Tells, if the last packet processed was a type 1 packet.
Definition at line 24 of file V5BitstreamSyntaxChecker.cpp.
| RegisterAddress::address_t V5BitstreamSyntaxChecker::lastType1Address | ( | ) | const |
Gets the register address of the last processed type 1 packet.
Definition at line 30 of file V5BitstreamSyntaxChecker.cpp.
|
virtual |
Resets the internal state.
Reimplemented in bil::V5PacketProcessor, and bil::V5BitstreamDeviceDetector.
Definition at line 36 of file V5BitstreamSyntaxChecker.cpp.
|
virtual |
Visits a BuswidthPattern packet.
| buswidthPattern | BuswidthPattern instance to be visited. |
| . |
Reimplemented from bil::V5PacketVisitor.
Reimplemented in bil::V5BitstreamXMLWriter.
Definition at line 45 of file V5BitstreamSyntaxChecker.cpp.
|
virtual |
Visits a DummyWord packet.
Never throws, since dummy words can be everywhere.
| dummyWord | DummyWord instance to be visited. |
Reimplemented from bil::V5PacketVisitor.
Reimplemented in bil::V5PacketProcessor, and bil::V5BitstreamXMLWriter.
Definition at line 53 of file V5BitstreamSyntaxChecker.cpp.
|
virtual |
Visits a SyncWord packet.
| syncWord | SyncWord instance to be visited. |
| . |
Reimplemented from bil::V5PacketVisitor.
Reimplemented in bil::V5BitstreamXMLWriter.
Definition at line 60 of file V5BitstreamSyntaxChecker.cpp.
|
virtual |
Visits a Type1Packet packet.
| type1Packet | Type1Packet instance to be visited. |
| . |
Reimplemented from bil::V5PacketVisitor.
Reimplemented in bil::V5BitstreamXMLWriter, bil::V5BitstreamDeviceDetector, and bil::V5PacketProcessor.
Definition at line 69 of file V5BitstreamSyntaxChecker.cpp.
|
virtual |
Visits a Type2Packet packet.
| type2Packet | Type2Packet instance to be visited. |
| . |
Reimplemented from bil::V5PacketVisitor.
Reimplemented in bil::V5BitstreamXMLWriter, bil::V5BitstreamDeviceDetector, and bil::V5PacketProcessor.
Definition at line 79 of file V5BitstreamSyntaxChecker.cpp.


son_editor.app package¶
son_editor.app.database module¶
-
son_editor.app.database.
init_db
()¶ Import model modules
- Import all modules here that might define models so that
- they will be registered properly on the metadata. Otherwise you will have to import them first before calling init_db()
-
son_editor.app.database.
reset_db
()¶ Resets the database
only used in tests
-
son_editor.app.database.
scan_project_dir
(project_path, pj)¶ Scan project dir
- Scans the project dir for any new functions and services
- via _scan_for_functions and _scan_for_services
Parameters: - project_path – The path of the project to scan
- pj – The project from the database to attach the descriptors to
Returns:
-
son_editor.app.database.
scan_workspaces_dir
()¶ Scan workpaces directory
- Scans the workpaces directory for any users.
- Will visit every one to add new workspaces etc via _scan_user_dir
son_editor.app.exceptions module¶
-
exception
son_editor.app.exceptions.
ExtNotReachable
(msg)¶ Bases:
Exception
Thrown whenever an external host cannot be contacted, be it because of a wrong url or network problems
-
exception
son_editor.app.exceptions.
InvalidArgument
(msg: str)¶ Bases:
Exception
Thrown whenever an argument is missing data or is supplying the wrong data
-
exception
son_editor.app.exceptions.
NameConflict
(msg: str)¶ Bases:
Exception
Thrown whenever a name conflict arises for names that must be unique
-
exception
son_editor.app.exceptions.
NotFound
(msg: str)¶ Bases:
Exception
Thrown whenever a resource cannot be located, or the user has no access to it
-
exception
son_editor.app.exceptions.
PackException
(msg: str)¶ Bases:
Exception
Thrown whenever a service cannot be packaged by son-package, wraps the cli tools error message
-
exception
son_editor.app.exceptions.
StillReferenced
(msg: str)¶ Bases:
Exception
Thrown whenever an action is taken towards an element that is still referenced by another that would compromise the relationship like deleting the referenced object
Bases:
Exception
Thrown whenever an unauthorized access is detected, e.g. because the user has not yet logged in
son_editor.app.securityservice module¶
-
son_editor.app.securityservice.
check_access
(request)¶ checks if the current user is allowed to access a given resource. Session will be invalidated if the login information cannot be found
Parameters: request – The http request made to the server Returns: nothing if access granted Raises: UnauthorizedException – if user not logged in


We work in partnership with Universities, Colleges, Middle/High Schools and several Youth Development Organizations to provide the youth opportunities for empowerment, community service, leadership development and academic support. Every week several youth (including special education students) are engaged in different activities that benefit both the participants and the community. The objective is to provide a safe and warm environment where youth feel welcome to engage in skill-building services that will positively impact their career aspirations and create a community link between generations and support our program services.
In partnership with City Harvest For New York City provide food support to families specifically for children 19 years and under Monday through Sunday. The objective is to offer nutritious meals to under-served youth in the South Bronx and to create a safe, healthy environment for youth to turn to during the summer.
We provide nutrition training to children and parents because the populations we serve have a high rate of obesity and diabetes. The program goal is to help clients know how to use the products and produce we provide at the pantry. It encourages positive eating behaviors by helping increase nutrition-related knowledge and changing skills, attitudes, and practices. Families learn together to prepare meals, learn about foods that will positively impact their health, and discover ways to stretch their dollars so they don’t go hungry. The overall objective is to reduce the high rate of obesity, diabetes and other health-related problems that is affecting a large portion of our community; to educate and empower each family to change potential life-threatening habits in a manageable, unique manner and to get to the source of all health related issues and create solutions for a healthier South Bronx.
The Senior Wellness Program is a weekly program that provides free health and nutrition classes, free health screening, free meal and free pantry to adults ages 55 and up on Thursdays from 12 pm – 3pm. This program is provided in partnership with Cornell University Cooperative Extension and supported by various program partners. The Senior Wellness Program has a wide selection of weekly activities and community service/volunteer opportunities for seniors that are seeking to volunteer their time and skills to stay active and enrich their lives and help make good things happen in the community. Every Thursday @ 12pm - 2pm
The Feed The Community Program provides emergency food support to individuals and families at risk of hunger and homelessness. The Food Program operates on Thursday from 10 am to 6 pm and on Saturday from 10 am to 3 pm. We also provide services to people that are referred to us from the New York City’s Hunger Hotline. The objective is to provide a consistent source of nourishment for food-insecure community members; to provide referrals and to be a check-point for those who are unable to seek out other human services. Emergency Clothing
Free weekly distribution of clothes, coats, shoes, etc. to the needy and homeless during program services. The objective is to ensure that clients’ basic clothing needs are met and to provide material goods that will help clients boost their job potential.
The immigrant population in our community is high and this program provides information and referrals to clients for their immigration problems. The objective is to create a safe space where immigrant issues can be discussed in confidence and to be a source of information, connections, and support during the process of immigration.
We provide on-site SNAP (formerly called Food Stamp) Screening and help clients to process their application. We also pre-screen the clients for other social service benefits they may qualify. The objective is to support a more sustainable solution to food insecurity; to ease the process of documentation for our community and to provide education and counseling for a more independent life.
The HIV/AIDS Outreach provides workshops/seminars and on-site testing/screening/referral to our community residents. Agencies that participate in this outreach include Bronx Aids Services, Elbert Einstein University Teaching Hospital, Harlem United, Latino Commission on AIDS, National Black leadership Commission on AIDS, etc. The objective is to educate the community and thereby stop the spread of preventable diseases; to support network for individuals that are infected or are substance abusers and to open the conversation of health to a wider group of people.
In partnership with the Department of Health, we provide weekly blood pressure screening to our clients in an effort to reduce the devastating effect that high blood pressure has on our community. After the screening clients that need medical care are referred to their primary care providers or appropriate health facility for follow-up/treatment. Every Thursday and Saturday from 10 am.
We provide nutrition training to children and parents because the populations we serve have a high rate of obesity and diabetes. The program goal is to help clients know how to use the products and produce we provide at the pantry. It encourages positive eating behaviors by helping increase nutrition-related knowledge and changing skills, attitudes, and practices. Families learn together to prepare meals, learn about foods that will positively impact their health, and discover ways to stretch their dollars so they don’t go hungry. The overall objective is to reduce the high rate of obesity, diabetes and other health-related problems that is affecting a large portion of our community; to educate and empower each family to change potential life-threatening habits in a manageable, unique manner and to get to the source of all health related issues and create solutions for a healthier South Bronx.
Our Center works in partnership with health insurance agencies to enroll our community residents with the health insurance of their choice. This program has benefited a lot of immigrants in our community. The objective is to make certain that every individual, regardless of economic or immigration status is insured. Services are available on Thursday and Saturday from 10 am.
In conjunction with Work Force 1, Bronx Office we provide job screening and referral because our ultimate goal is to get the clients to become self-sufficient or independent. The objective is to be a practical, informative solution for unemployed individuals and to provide contacts, education and skill building that will further each client’s job prospects.


&
&
&
Fifteen thousand rallied at OneLife LA this weekend!! Thousands proclaim “Women
Deserve Better® than Abortion” and “Peace Begins in the Womb.”
Four thousand participated in the March for Life in Chicago. Watch the video and
see our presence as a 1000 carried our placards. [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijyGZlvFu6wa_1KqEPZmueRUvarEr-6pHXCrahTuNy7S5_nHphiau63wj2mturLFv96jyqHpyXVrrQR3IWx8fMXRHUQW_aApE45SafWRgsHtPdcVL3tAbuD63V1ZDuJBseZi5Zb1sGIsMdS51pWhU3aR7BqlcP2Xddoq2K3Fzr9KJUo3Kra3sNDHck-J_S6gFa0icFqu1rVgZZ_lxH-xJZY=&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
Congratulations and thank you to volunteers and donors at both events who helped
us get our messages out!
Now onto Washington DC for the March for Life. Meet us on the mall on Madison nearest
the door to the National Museum for American History [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijyGZlvFu6waDtvqKdaqzbd1IjtBZOLW1S4Oree49-ykPGu8mrzpZwK2-0JK5-AR8ZhgCvfbHmBvaQCgTiPyHSe6l3cx54G1LfZwrt4mAdbDL38YTU029bZAhLYaMwEb1yFPW9kB4iTO6hWsAlbxYXiNKJGWAd8pzKNG1N8rimrcXbvyAFay3zc5zKZVSzofcegIgq5Ms8dqBvayI6syHPU=&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==].
We will be there at 11:15am. Be sure to pick up a placard, help distribute them,
and march with us.
Hear FFL President Serrin Foster’s interview [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijyGZlvFu6waFDe-0_yFX3IQVdriqZ7dyuAlsedRttTYV3cNxPTursGlB5GTSgpFL_UltfnnnSyIJohg5mLDKCYauIGuGo86dO_Gpeb3OWiVAo8GH6vsfIY6P7zTLuIJU02_z9Jtv-WcuwVZfJzrgp5fKaapGl4ftqCrtds4BkvD&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
leading up to the March for Life with Karen Testerman in New Hampshire [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijyGZlvFu6waFDe-0_yFX3IQVdriqZ7dyuAlsedRttTYV3cNxPTursGlB5GTSgpFL_UltfnnnSyIJohg5mLDKCYauIGuGo86dO_Gpeb3OWiVAo8GH6vsfIY6P7zTLuIJU02_z9Jtv-WcuwVZfJzrgp5fKaapGl4ftqCrtds4BkvD&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
(starting at 4.30 minutes).
Serrin will also be interviewed live from the Mall in Washington, D.C. by Jack
Riccardi on 550 AM on ABC affiliate KTSA radio station in Alamo, Texas at 11:05
AM ET.
Then at 11:40 AM ET, Serrin will be interviewed by Gus Lloyd host of Seize the
Day on the Catholic Channel SiriusXM .
During the rally, Serrin will join other pro-life leaders from the stage. Watch
live coverage on EWTN!
And for those on the other coast, join us at the InfoFaire before the Walk for
Life West Coast in San Francisco. Volunteers helping Pat O'Kane at the booth should
arrive at 10:45 AM.
If you are home watch for FFL Vice President Sally Winn to be interviewed live
from the Walk for Life West Coast on EWTN this Saturday. Sally will be at both
Students for Life Conferences in MD on Friday and CA on Sunday. Register now! [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijA5OeRDuHnbOtNCNToXUe0a7IZZ-_W8hNwNU8Qkvq3Bhyg9lozX9tnYhVk8djyYc3aw0DuttXstu-jBVzjFFF-7Xhy8t6-bxoKfdlQ15XaL8nGPN8s-ZSDayY6exR9QmuG7RBYLuGnK&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
Cynthia Wood, who will lead FFL marchers at the March for Life, will also be at
Cardinal O'Connor Conference [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijA5OeRDuHnb3jlKT8H4RomScQs7mHo6W9J0R0gqJPaSTQ9hx6gKUFjfMAzCxD1IrXtjZVnut8pvUFLqNUsXkqXRDke6x8kHosJ3iP5WNb0AxqkTEMdZp6hV7McDiq-NpppHyhNbQS60PIa86xOA0IftAIHg7fgRsDE_rFYe-eTiIWGlUcXzsjQ=&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
on Saturday.
If you missed Serrin’s cover story in America magazine and the interview on “America
this Week”, read it [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZirY2x616DmU8MsM7SXv48jSHzhzqXmZKjAYmTOI0HMeaizyk0Aa37-M4U1n76QZVuM-o-Q4FjEl5ZhDPZV3Jl92MiccjjBn01qjwvQmDFVrfVeEot3b5pEiXM5V3U9UZfOyOuUHlKxQ4SeGemxyV6odxSSislYtBz2a66qR72L8V&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
and hear her [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZijyGZlvFu6waHHPbkS5uiPihUf2dfvTz6pYXp705QShWW_VgMVqToDG_FPJ1EmdwKsX1D0-FLIGyXZtAGu6qheTbDjQCCoPvMwR3G6vU-EfXKmQccKf5CuAijEq5gvtwbwJlQ2aXUmvBYmzYlMEXI8-Pj0x3BOLnJvVc_qoV6oTufdYXeWH3gqSMBmfs6CwkOw==&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==]
now!
March forth!!
Feminists for Life of America is a nonsectarian, nonpartisan organization.
Women Deserve Better than Abortion is a registered trademark of Feminists for Life
of America. Peace Begins in the Womb is copyrighted since 1994.
Join and support our work now. www.feministsforlife.org/support [http://r20.rs6.net/tn.jsp?f=001oQdX-KRnfjobRYxBazlLnvmZ0oMb1jVnOSMcZ1hW1flYnYFTFzpZiv6CzGB7A1hfNA45GQbht31oLshJo02BV9OoD2IeGH2xLAt0gC9sH7neOX_nQUM-8_9b4hH9B25BiA5kMw_J87l8ugSkP8_M52E-kayfjUrcHjaGBb4X8gU4mkl2unlaQNye6ppMk7H9&c=OIg1qP8D1B35xRsJjRmx2NQQHW6SCVeQ8xB8o6phA1EsTx0HBFmmpA==&ch=Y-yc4sQSG8RXbTbSsw7NACvuXr-g6jdVUuNhUS_KRWzrdrY4SfrIww==].
Feminists for Life of America is a 501©3 nonprofit. Membership contributions and
donations are tax-deductible to the extent allowed by law.
Thank You!
&
&
&
Forward this email
<EMAIL_ADDRESS>This email was sent to<EMAIL_ADDRESS>by<EMAIL_ADDRESS>Update Profile/Email Address
http://visitor.constantcontact.com/do?p=oo&m=001Q-HkL4DKCBRaE4RH1EOTXw%3D%3D&ch=5af11d60-4f61-11e3-9d28-d4ae5275dbea&ca=e35406c8-5964-4442-8c69-b1cdad36ae7b
Instant removal with SafeUnsubscribe™
http://visitor.constantcontact.com/do?p=un&m=001Q-HkL4DKCBRaE4RH1EOTXw%3D%3D&ch=5af11d60-4f61-11e3-9d28-d4ae5275dbea&ca=e35406c8-5964-4442-8c69-b1cdad36ae7b
Privacy Policy:
http://ui.constantcontact.com/roving/CCPrivacyPolicy.jsp
Online Marketing by
Constant Contact®
www.constantcontact.com
Feminists for Life | P.O. Box 320667 | Alexandria | VA | 22320


Grand Master Samael:
Why are you here?
Galadrid told you to come, didn't he?
You're here for that thing, aren't you?! But, there's a problem. I can't decipher some of the passages because there are some odd characters in the middle.
"How can I help?"


No title
No author
Sorry, your browser does not support the HTML5 Canvas. Please switch to a better browser.


You're in bed, getting ready to sleep. You hear the window shatter. You...

You waited but then something jumps and your head is gone.


{% extends "header.html" %} {% block body %}
Thank you for using nodemarketcap.com and/or its associated social media pages (collectively, the “Site”). By using the Site you agree to the below terms (“Terms”). Please read them completely and carefully.
NodeMarketCap (the “Company”) lists and provides information, gathered from third parties, regarding cryptocurrencies and cryptocurrency exchanges on the Site (the “Services”). Additionally, Company collects and lists information from companies associated with cryptocurrencies and/or cryptocurrency exchanges, and/or expedites the collection and listing thereof, in exchange for a fee (the “Paid Services”). If you are a user of the Paid Services, the agreement between you and Company (a “Paid Services Agreement”) shall supersede any conflict with these terms.
Unless expressly indicated on the Site in connection with a particular cryptocurrency or exchange, Company makes no representation or warranty that either Company or any of Company's third party information providers ("Information Providers"): (1) has passed on the merit of any of the cryptocurrencies or exchanges listed on the site (the “Products”); or (2) has endorsed or sponsored any of these Products. The information contained herein is provided for informational and educational purposes only, and nothing contained herein should be construed as investment advice, financial advice, trading advice, or any other sort of advice, either on behalf of a particular Product or as an overall investment strategy. Company does not recommend that any cryptocurrency should be bought, sold, or held by you.
Company strives to ensure the accuracy of information listed on this website, but Company provides this information “as is.” Neither Company nor the Information Providers are responsible for any inaccurate information on the Site, whether posted or caused by users, employees, equipment, programming, or conduct of users, online or offline.  COMPANY DISCLAIMS ALL EXPRESS, IMPLIED, AND STATUTORY WARRANTIES OF ANY KIND TO USERS, INFORMATION PROVIDERS, AND/OR ANY THIRD PARTY, INCLUDING WARRANTIES AS TO ACCURACY, TIMELINESS, COMPLETENESS, MERCHANTABILITY, OR FITNESS FOR ANY PARTICULAR PURPOSE. Investment-related advice and comments presented on or in connection with the Site are solely those of the individuals or entities who published them. They do not in any way represent the opinions of Company on whether to engage in any specific investing decision. Use caution as you read through information posted on the Site.
The Site cannot assist you with respect to any regulatory complaint. If you have a specific complaint about the trading of a cryptocurrency, or about an exchange, please register your complaint with an appropriate regulatory entity. For example, for more information, see www.sec.gov (U.S. Securities and Exchange Commission), www.finra.org (Financial Industry Regulatory Authority) or www.nasaa.org (North American Securities Administrators Association).
 Furthermore, you agree to indemnify the Information Providers for any cause of action whatsoever, whether in tort, contract, or otherwise, that is based on information provided on the Site in connection with such Information Provider. Accordingly, neither the Company nor any Information Provider(s) shall have any liability in tort, contract, or otherwise (and as permitted by law, product liability), to any user and/or any third party arising out of your use of the Site, and you hereby waiver any claim or cause of action related to such.
THE COMPANY HAS DISCLAIMED ALL REPRESENTATIONS AND WARRANTIES WITH REGARD TO THE INFORMATION CONTAINED ON THE SITE.
The works of authorship contained on the Site, including but not limited to all design, text, and images, are owned, except as otherwise expressly stated, by The Company, and may not be copied, reproduced, transmitted, displayed, performed, distributed, rented, sublicensed, altered, stored for subsequent use or otherwise used in whole or in part in any manner without the prior written consent of Company except for: (a) one temporary copy in a single computer's memory and one unaltered permanent copy to be used by the viewer for personal and non-commercial use only, or (b) reproduced, transmitted, or displayed for academic or journalistic use provided that such use includes a concurrent, direct, and immediate citation to “nodemarketcap.com” as source.
The trademarks, service marks, and logos (collectively, the “Marks”) used on the Site, whether registered trademarks, unregistered trademarks, and/or service marks are owned by Company in the United States and worldwide. Nothing contained on this website should be construed as granting, by implication, estoppel, or otherwise, any license or right to use, for any purpose, any of the Marks without the prior written permission of Company. Any use of the Marks is strictly prohibited.
Other brands, product names, logos, trademarks, and service marks (“Third Party Marks”) used on the website are trademarks and/or service marks of their respective owners and should be treated as such. Neither their presence on the Site, nor anything contained on the Site, should be construed as granting permission to use the Third Party Marks. Any use of the Third Party Marks may result in legal action from the owner of such marks, and Company shall not be held liable for any such use.
If you are using our Services on behalf of a business, whether as an employee, contractor, subcontractor, or otherwise, you warrant and represent that that business accepts these Terms in their entirety, and that you have authority to bind that business to these Terms.
We are constantly changing and improving our Services. We may add or remove functionalities or features, and we may suspend or stop a Service altogether (“Changes”). Continued use of the Services constitutes consent to any Changes.
You can stop using our Services at any time. Company may also stop providing Services to you, add to the Services, or create new limits to our Services at any time.
You understand and accept that by using the Site, or submitting any information to Company, you agree to the terms of Company’s Privacy Policy.
We may modify these Terms or any additional terms that apply to a Service to, for example, reflect changes to the law or changes to our Services. You should look at the Terms regularly. We’ll post notice of modifications to these Terms on this page. We’ll post notice of modified additional terms in connection with the applicable Service. Changes will not apply retroactively and will become effective as soon as they are posted. If you do not agree to the modified terms for a Service, you should discontinue your use of that Service.
If there is a conflict between these Terms and the additional terms, the additional terms will control for that conflict.
These Terms control the relationship between Company and you, and unless expressly provided for otherwise in these Terms, do not create any third party beneficiary rights.
If you do not comply with these Terms, and we don’t take action right away, this doesn’t mean that we are giving up any rights that we may have (such as taking action in the future).
These Terms are intended to apply worldwide. If any provision of this Agreement is determined to be invalid or unenforceable in whole or in part, by a court of competent jurisdiction, such invalidity or unenforceability shall affect only such provision or part of such provision, and the remaining part of such provision, and remaining part of this Agreement, shall continue in full force and effect.
The laws of the State of Delaware, U.S.A., excluding Delaware’s conflict of laws rules, will apply to any disputes arising out of or relating to these Terms or the Services. By using the Site, you consent to the personal jurisdiction of the State of Delaware. All claims arising out of or relating to these Terms or the Services will be litigated exclusively in the federal or state courts of Kent County, Delaware, USA.


You can edit this question for the applicant as well as the guidance for assessors.
Edit this question
Return to application questions


Hey, I get it, its not generally cool to be cheap, but with a recession(a 35% drop in the markets every 3 years or so on average), I figure its cool about every 3 years. Not that I’m trying to be cool, I am more or less trying to organize my thoughts in one place, maybe explain some cool finance stuff to readers and overall, enjoy the ride, so contact me on any topic and I will write about it… maybe, if its relevant, or you know, interesting.. to me. Can you tell that I like the dot dot dot thing?


BIG A film review by Steve Rhodes Copyright 1997 Steve Rhodes
RATING (0 TO ****): *** 1/2
There is a moment towards the end in BIG (1988), director Penny Marshall's ode to the dichotomy between youth and maturity, when Tom Hanks looks wistfully over his old neighborhood. Although now a man in an expensive double-breasted suit, it was just weeks ago that he was a naive 13-year-old, who enjoyed the simple pleasures of childhood -- playing baseball with his buddies and having leaf fights with autumn's soon-to-be-buried treasures. In a rhetorical question, he asks himself silently whether he is willing to give up his newfound power and riches to go back to the challenges and wonderment of youth.
From the first story of the fountain of youth, authors have explored the divide between childhood and adulthood, with each having their merits. Those older wish to be younger and vice versa, the grass always being viewed as greener on the other side of the fence.
Even with this overdeveloped theme, the Academy Award nominated script by Gary Ross and Anne Spielberg manages to say fresh things and to draw the viewers into a story populated by likable characters.
Although Hanks was nominated for best actor for his part, he was beaten that year by Daniel Day-Lewis in MY LEFT FOOT, the sort of sentimental, big message film that Hollywood favors. In BIG Hanks gives one of the best performances of his impressive career. Most actors would have approached the part with a heavy emphasis on slapstick and exaggerated gestures, but not Hanks. Hanks rightly sees the boy as being as frightened and awkward as he is giddily elated at the prospect of instant adulthood. His most moving scene in the show occurs as he lays alone in a NYC fleabag hotel. As the noise of the city's terrors filter into his room, he lies on the bed gently sobbing as he grips his pillow. This 13-year-old is just barely a teenager even if he now has a full-sized man's body, and Hanks's reactions to his predicament could not be more realistic or touching.
It all started because Josh, played by David Moscow when young and Hanks when full grown, was impatient. As he watched an older guy pick up the girl he dreamed of dating, he wished he were older. And when a carny machine called "Zoltar Speaks," offered him a wish, his was a simple one -- "I wish I was big." When the machine just spit out a card stating, "Your wish is granted," he was not impressed. Well, not until the next morning when he woke up in a man-sized body.
Marshall is a master at the staging of scenes. From the thud of Josh's big feet getting out of bed for the first time to the wind swept leaves of the vacant lot where the carny once was, she captures the essence of the situation with her typically parsimonious approach. Avoiding frequent opportunities for special effects, she relies instead on the actors and the dialog to tell the story. When the inevitable scene occurs in which the full grown Josh reverts back to his teenage body, she cuts away from a rear view of Tom Hanks back and then returns to David Moscow, who is seen walking away in a suit several sizes too large.
In a story with more depth than might be expected, Josh secures a position as a "computer operator," actually a data entry clerk, at a toy manufacturer. By chance he impresses the company's president, played with great good spirits by Robert Loggia, who ends up giving Josh the position of Vice President of Product Development. As part of Josh's fairy-tale life, he gets to play chopsticks with his boss on a huge floor piano at FAO Schwarz in easily the most captivating scene in the picture.
In contrast to Josh's innocence, Elizabeth Perkins as Susan and John Heard as Paul play yuppie executives on the move. Toys to them mean focus groups and demographic studies, but to Josh toys only mean fun. When Heard gives a stellar presentation on a toy building that transforms, Josh disagrees, arguing that there is nothing fun about a building. Josh suggested bugs instead, which the president loves.
The most delicate part of the film is Susan's crush on Josh, which leads to a "sleepover." Marshall, by cutting away just after Susan takes off her blouse and Josh touches her with childlike innocence, manages to keep the show's PG rating and give the scene incredible but simple beauty.
It would be easy to miss how important Perkins's performance is in the film. Dressed in proper but alluring ankle length dresses at the office, Susan starts with a tough edge, but her contact with Josh changes her life forever. After going to a party in a frilly black skirt, she gets herself invited into Josh's apartment. In the perfect cure for her stiffness, he gets her to join him on his trampoline. As her ruffles fly all about her, her transformation is palpable.
Although the story is set in the adult world, Josh's childhood companion, Billy (Jared Rushton), appears frequently to remind Josh of his childhood roots. When Josh eventually becomes as hard driven an executive as the others and has no time for Billy, Billy poses a simple question to him. "I'm your best friend," he says. "What's more important than that?" What indeed.
BIG runs 1:44. It is rated PG for some profanity and the beginnings of a love making scene. The film would be fine for kids 8 and up, but they may need to be 10 to enjoy it.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Are you sure want to delete VRF {{ object.name }}?
{% if object.networks.count and object.hosts.count %}
Related {{ object.networks.count }} network(s) and {{ object.hosts.count }}
host(s)
will
be
deleted too.
{% elif object.networks.count %}
Related {{ object.networks.count }} network(s) will be
deleted too.
{% elif object.hosts.count %}
Related {{ object.hosts.count }} host(s) will be
deleted too.
{% endif %}
It can't be undone!


[gecode-users] Windows compiler
Christian Schulte
cschulte at kth.se
Tue Jun 15 23:44:15 CEST 2010
Well…
Depends on what you want to do: if you want to compile Gecode yourself, then you have to stick to 2008 (while the trunk can be compiled with 2010, the latest released version 3.3.1 cannot). If you want x64 rather than x86 you have to stick to 2008 anyway (the 64 bit compiler is in the Windows DDK and last time I checked it was still 2008 or you have to buy the professional version of MSVC).
Compiling your programs and link to the Gecode binaries we distribute should be fine with 2010 as far as we know.
It’ll be quite a while before we will start distributing binaries ourselves compiled with MSVC 2010 as we still have to figure out some packaging issues and last time I checked Qt as needed for Gist did not compile with 2010 either. Eventually we will change, but unlikely this year.
Hope that helps
Christian
--
Christian Schulte, web.ict.kth.se/~cschulte/
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf Of Ivan A. Tamayo
Sent: Tuesday, June 15, 2010 10:24 PM
To: users at gecode.org
Subject: [gecode-users] Windows compiler
It is recommendable to use Visual Studio 2010 Express or should I stick to the 2008 Express version?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20100615/28f12f08/attachment.htm>
More information about the users
mailing list


Choose a name for your script
The full path to the script file
This script is currently running. It will get stopped and removed from the list. The script file will NOT be deleted.
The script will be removed from this list and the script file will NOT be deleted.
Are you sure that you want to stop all scripts? They will still remain in this list.