text:
<?xml version="1.0" encoding="utf-8"?>
<tables>
	<table name="test">
		<field name="test1" type="bigint" unsigned="true" null="true"/>
		<field name="test2" type="text" unsigned="true" null="false"/>
		<field name="test3" type="bigint" unsigned="true" null="false"/>
	</table>
</tables>

redpajama_set_name: RedPajamaGithub


text:
| Schema | [finance](../../schemas/finance.md) |
| ------ | ----------------------------------------------- |
| Materialized View Name | merchant_fee_setup_scrud_view |
| Owner | frapid_db_user |
| Tablespace | DEFAULT |
| Description |  |

**Source:**

```plpgsql
 CREATE OR REPLACE VIEW finance.merchant_fee_setup_scrud_view
 AS
 SELECT merchant_fee_setup.merchant_fee_setup_id,
    ((bank_accounts.bank_name::text || ' ('::text) || bank_accounts.bank_account_number::text) || ')'::text AS merchant_account,
    ((payment_cards.payment_card_code::text || ' ( '::text) || payment_cards.payment_card_name::text) || ')'::text AS payment_card,
    merchant_fee_setup.rate,
    merchant_fee_setup.customer_pays_fee,
    ((accounts.account_number::text || ' ('::text) || accounts.account_name::text) || ')'::text AS account,
    merchant_fee_setup.statement_reference
   FROM finance.merchant_fee_setup
     JOIN finance.bank_accounts ON merchant_fee_setup.merchant_account_id = bank_accounts.account_id
     JOIN finance.payment_cards ON merchant_fee_setup.payment_card_id = payment_cards.payment_card_id
     JOIN finance.accounts ON merchant_fee_setup.account_id = accounts.account_id
  WHERE NOT merchant_fee_setup.deleted;
```

### Related Contents
* [Schema List](../../schemas.md)
* [View List](../../views.md)
* [Materialized View List](../../materialized-views.md)
* [Table of Contents](../../README.md)


text:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:layout_marginTop="16dp"
        android:text="Settings Fragment"/>

</LinearLayout>


text:
cd /home/docket/athensdocket

LOGDIR=/home/docket/logs
PIDFILE=$LOGDIR/celery.pid

mkdir -p $LOGDIR

if [ -f $PIDFILE ]
then
	pid=$(cat $PIDFILE)
	if [ ! -z "$pid" ]
	then
		echo "Trying to kill $pid"
		kill $pid
		ps -elf | grep celery
		sleep 10
	fi
fi

# Move directories so we can find the docket code and celery config
# file
cd /home/docket/athensdocket

# Start the daemon
nohup /home/docket/env/bin/celeryd -f $LOGDIR/celery.log -l INFO --pidfile $PIDFILE &

for i in 1 2 3 4 5
do
	if [ ! -f $PIDFILE ]
	then
		echo "waiting..."
		sleep 10
	else
		echo "Running $(cat $PIDFILE)"
		break
	fi
done


text:
angular.module('onlineExamPrep.common')
    .service('TokenService', function ($window) {
        'use strict';

        var token = null;

        this.setToken = function (tokenData) {
            $window.localStorage.token = angular.toJson(tokenData);
            token = tokenData;
        };

        this.getToken = function () {
            if (!token) {
                token = angular.fromJson($window.localStorage.token);
            }
            return token;
        };

        this.removeToken = function () {
            token = null;
            delete $window.localStorage.token;
        };
    });


text:
#include "core/loader/resource/CSSStyleSheetResource.h"

#include "core/css/StyleSheetContents.h"
#include "core/fetch/FetchRequest.h"
#include "core/fetch/MemoryCache.h"
#include "core/fetch/ResourceClientWalker.h"
#include "core/fetch/ResourceFetcher.h"
#include "core/loader/resource/StyleSheetResourceClient.h"
#include "platform/SharedBuffer.h"
#include "wtf/CurrentTime.h"

namespace blink {

CSSStyleSheetResource* CSSStyleSheetResource::fetch(FetchRequest& request,
                                                    ResourceFetcher* fetcher) {
  DCHECK_EQ(request.resourceRequest().frameType(),
            WebURLRequest::FrameTypeNone);
  request.mutableResourceRequest().setRequestContext(
      WebURLRequest::RequestContextStyle);
  CSSStyleSheetResource* resource = toCSSStyleSheetResource(
      fetcher->requestResource(request, CSSStyleSheetResourceFactory()));
  // TODO(kouhei): Dedupe this logic w/ ScriptResource::fetch
  if (resource && !request.integrityMetadata().isEmpty())
    resource->setIntegrityMetadata(request.integrityMetadata());
  return resource;
}

CSSStyleSheetResource* CSSStyleSheetResource::createForTest(
    const ResourceRequest& request,
    const String& charset) {
  return new CSSStyleSheetResource(request, ResourceLoaderOptions(), charset);
}

CSSStyleSheetResource::CSSStyleSheetResource(
    const ResourceRequest& resourceRequest,
    const ResourceLoaderOptions& options,
    const String& charset)
    : StyleSheetResource(resourceRequest,
                         CSSStyleSheet,
                         options,
                         "text/css",
                         charset),
      m_didNotifyFirstData(false) {}

CSSStyleSheetResource::~CSSStyleSheetResource() {}

void CSSStyleSheetResource::setParsedStyleSheetCache(
    StyleSheetContents* newSheet) {
  if (m_parsedStyleSheetCache)
    m_parsedStyleSheetCache->clearReferencedFromResource();
  m_parsedStyleSheetCache = newSheet;
  if (m_parsedStyleSheetCache)
    m_parsedStyleSheetCache->setReferencedFromResource(this);

  // Updates the decoded size to take parsed stylesheet cache into account.
  updateDecodedSize();
}

DEFINE_TRACE(CSSStyleSheetResource) {
  visitor->trace(m_parsedStyleSheetCache);
  StyleSheetResource::trace(visitor);
}

void CSSStyleSheetResource::didAddClient(ResourceClient* c) {
  DCHECK(StyleSheetResourceClient::isExpectedType(c));
  // Resource::didAddClient() must be before setCSSStyleSheet(), because
  // setCSSStyleSheet() may cause scripts to be executed, which could destroy
  // 'c' if it is an instance of HTMLLinkElement. see the comment of
  // HTMLLinkElement::setCSSStyleSheet.
  Resource::didAddClient(c);

  if (hasClient(c) && m_didNotifyFirstData)
    static_cast<StyleSheetResourceClient*>(c)->didAppendFirstData(this);

  // |c| might be removed in didAppendFirstData, so ensure it is still a client.
  if (hasClient(c) && !isLoading()) {
    static_cast<StyleSheetResourceClient*>(c)->setCSSStyleSheet(
        resourceRequest().url(), response().url(), encoding(), this);
  }
}

const String CSSStyleSheetResource::sheetText(
    MIMETypeCheck mimeTypeCheck) const {
  if (!canUseSheet(mimeTypeCheck))
    return String();

  // Use cached decoded sheet text when available
  if (!m_decodedSheetText.isNull()) {
    // We should have the decoded sheet text cached when the resource is fully
    // loaded.
    DCHECK_EQ(getStatus(), Resource::Cached);

    return m_decodedSheetText;
  }

  if (!data() || data()->isEmpty())
    return String();

  return decodedText();
}

void CSSStyleSheetResource::appendData(const char* data, size_t length) {
  Resource::appendData(data, length);
  if (m_didNotifyFirstData)
    return;
  ResourceClientWalker<StyleSheetResourceClient> w(clients());
  while (StyleSheetResourceClient* c = w.next())
    c->didAppendFirstData(this);
  m_didNotifyFirstData = true;
}

void CSSStyleSheetResource::checkNotify() {
  // Decode the data to find out the encoding and cache the decoded sheet text.
  if (data())
    setDecodedSheetText(decodedText());

  ResourceClientWalker<StyleSheetResourceClient> w(clients());
  while (StyleSheetResourceClient* c = w.next()) {
    markClientFinished(c);
    c->setCSSStyleSheet(resourceRequest().url(), response().url(), encoding(),
                        this);
  }

  // Clear raw bytes as now we have the full decoded sheet text.
  // We wait for all LinkStyle::setCSSStyleSheet to run (at least once)
  // as SubresourceIntegrity checks require raw bytes.
  // Note that LinkStyle::setCSSStyleSheet can be called from didAddClient too,
  // but is safe as we should have a cached ResourceIntegrityDisposition.
  clearData();
}

void CSSStyleSheetResource::destroyDecodedDataIfPossible() {
  if (!m_parsedStyleSheetCache)
    return;

  setParsedStyleSheetCache(nullptr);
}

void CSSStyleSheetResource::destroyDecodedDataForFailedRevalidation() {
  setDecodedSheetText(String());
  destroyDecodedDataIfPossible();
}

bool CSSStyleSheetResource::canUseSheet(MIMETypeCheck mimeTypeCheck) const {
  if (errorOccurred())
    return false;

  // This check exactly matches Firefox. Note that we grab the Content-Type
  // header directly because we want to see what the value is BEFORE content
  // sniffing. Firefox does this by setting a "type hint" on the channel. This
  // implementation should be observationally equivalent.
  //
  // This code defaults to allowing the stylesheet for non-HTTP protocols so
  // folks can use standards mode for local HTML documents.
  if (mimeTypeCheck == MIMETypeCheck::Lax)
    return true;
  AtomicString contentType = httpContentType();
  return contentType.isEmpty() || equalIgnoringCase(contentType, "text/css") ||
         equalIgnoringCase(contentType, "application/x-unknown-content-type");
}

StyleSheetContents* CSSStyleSheetResource::restoreParsedStyleSheet(
    const CSSParserContext* context) {
  if (!m_parsedStyleSheetCache)
    return nullptr;
  if (m_parsedStyleSheetCache->hasFailedOrCanceledSubresources()) {
    setParsedStyleSheetCache(nullptr);
    return nullptr;
  }

  DCHECK(m_parsedStyleSheetCache->isCacheableForResource());
  DCHECK(m_parsedStyleSheetCache->isReferencedFromResource());

  // Contexts must be identical so we know we would get the same exact result if
  // we parsed again.
  if (*m_parsedStyleSheetCache->parserContext() != *context)
    return nullptr;

  return m_parsedStyleSheetCache;
}

void CSSStyleSheetResource::saveParsedStyleSheet(StyleSheetContents* sheet) {
  DCHECK(sheet);
  DCHECK(sheet->isCacheableForResource());

  if (!memoryCache()->contains(this)) {
    // This stylesheet resource did conflict with another resource and was not
    // added to the cache.
    setParsedStyleSheetCache(nullptr);
    return;
  }
  setParsedStyleSheetCache(sheet);
}

void CSSStyleSheetResource::setDecodedSheetText(
    const String& decodedSheetText) {
  m_decodedSheetText = decodedSheetText;
  updateDecodedSize();
}

void CSSStyleSheetResource::updateDecodedSize() {
  size_t decodedSize = m_decodedSheetText.charactersSizeInBytes();
  if (m_parsedStyleSheetCache)
    decodedSize += m_parsedStyleSheetCache->estimatedSizeInBytes();
  setDecodedSize(decodedSize);
}

}  // namespace blink


text:
/// Maintains wall, user and kernel times.
struct times_t
{
  times_t(double real, double user, double sys)
    : real(real)
    , user(user)
    , sys(sys)
  {
  }

  double real;
  double user;
  double sys;
};

/// Convert a FILETIME to a double.
double cast_time(const FILETIME& ft)
{
  UINT64 ft64 = (ft.dwLowDateTime | (UINT64)ft.dwHighDateTime << 32);
  return ((double)ft64 * 0.0000001);
}

/// Calculate times for process.
struct times_t get_times(HANDLE process)
{
  // Get process times
  FILETIME created = {0}, killed = {0}, sys, user;
  if (!GetProcessTimes(process,
    &created,
    &killed,
    &sys,
    &user))
  {
    wprintf(L"gtime: Failed to get process times, error: %d\n", GetLastError());
    exit(1);
  }

  // If we're asking for the current process,
  // it will never have exited, and we force real to zero.
  if (process == GetCurrentProcess())
    killed = created;

  // Calculate wall time
  double real = cast_time(killed) - cast_time(created);
  return times_t(real, cast_time(user), cast_time(sys));
}

/// Build a string forming the command to be timed.
std::wstring build_child_command(int argc, wchar_t* argv[])
{
  std::wstring buffer;
  for (int i = 1; i < argc; ++i)
  {
    if (!buffer.empty())
      buffer += L" ";

    buffer += argv[i];
  }

  return buffer;
}

/// Entry point.
int wmain(int argc, wchar_t* argv[])
{
  // Default to the gtime process itself.
  HANDLE process = GetCurrentProcess();
  int exit_code = 0;

  std::wstring child_command = build_child_command(argc, argv);
  if (!child_command.empty())
  {
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi = { 0 };
    if (!CreateProcessW(NULL, &child_command[0], NULL, NULL,
                        TRUE, 0, NULL, NULL, &si, &pi))
    {
      wprintf(L"gtime: Failed to launch child command, error: %d\n",
              GetLastError());
      exit(1);
    }

    ::WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hThread);

    process = pi.hProcess;
  }

  times_t times = get_times(process);

  if (process != GetCurrentProcess())
  {
    unsigned long process_exit_code = 0;
    GetExitCodeProcess(process, &process_exit_code);
    exit_code = process_exit_code;
    CloseHandle(process);
  }

  wprintf(L"real    %.3fs\n", times.real);
  wprintf(L"user    %.3fs\n", times.user);
  wprintf(L"sys     %.3fs\n", times.sys);

  return exit_code;
}


text:
class Afinfo

  def self.file(file_name)
    `afinfo #{file_name}`
  end

  def self.duration(file_name)
    (self.file(file_name).scan /duration:\s(\d+.\d+)/).flatten.first
  end

end


text:
/**
 * Definition for singly-linked list with a random pointer.
 * class RandomListNode {
 *     int label;
 *     RandomListNode next, random;
 *     RandomListNode(int x) { this.label = x; }
 * };
 */
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        if (head == null)
            return null;
        int nodeCount = 0;
        RandomListNode traversal = head;
        while  (traversal != null) {
            nodeCount++;
            traversal = traversal.next;
        }
        Map<RandomListNode, Integer> indexMap = new HashMap<RandomListNode, Integer>();
        RandomListNode[] copys = new RandomListNode[nodeCount];
        traversal = head;
        for (int i = 0; i < nodeCount; i++) {
            indexMap.put(traversal, i);
            copys[i] = new RandomListNode(traversal.label);
            if (i != 0)
                copys[i - 1].next = copys[i];
            traversal = traversal.next;
        }
        traversal = head;
        for (int i = 0; i < nodeCount; i++) {
            if (traversal.random != null)
                copys[i].random = copys[indexMap.get(traversal.random)];
            traversal = traversal.next;
        }

        return copys[0];
    }
}

public class Solution2 {
    public RandomListNode copyRandomList(RandomListNode head) {
        Map<RandomListNode, RandomListNode> nodeMap = new HashMap<RandomListNode, RandomListNode>();
        return copyHelper(head, nodeMap);
    }

    public RandomListNode copyHelper(RandomListNode head, Map<RandomListNode, RandomListNode> nodeMap) {
        if (head == null) return null;
        if (nodeMap.containsKey(head)) return nodeMap.get(head);
        RandomListNode result = new RandomListNode(head.label);
        nodeMap.put(head, result);
        result.next = copyHelper(head.next, nodeMap);
        result.random = copyHelper(head.random, nodeMap);
        return result;
    }
}


text:
using Cauldron.Interception.Cecilator;
using CSScriptLibrary;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml;

namespace Cauldron.Interception.Fody
{
    public sealed partial class ModuleWeaver
    {
        private List<string> referencedDlls = new List<string>();

        public void ExecuteInterceptionScripts(Builder builder)
        {
            using (new StopwatchLog(this, "custom interceptors"))
            {
                var scriptBinaries = new List<Assembly>();
                var interceptorDirectory = Path.Combine(this.ProjectDirectoryPath, "Interceptors");
                var scripts = this.GetCustomInterceptorList();

                this.referencedDlls.AddRange(Directory.GetFiles(this.AddinDirectoryPath, "*.dll"));
                this.referencedDlls.AddRange(typeof(ModuleWeaver).Assembly.GetReferencedAssemblies().Select(x => Assembly.Load(x).Location?.Trim()).Where(x => !string.IsNullOrEmpty(x)));

                if (Directory.Exists(interceptorDirectory))
                    scripts = scripts
                        .Concat(Directory.GetFiles(interceptorDirectory, "*.csx", SearchOption.AllDirectories))
                        .Concat(Directory.GetFiles(interceptorDirectory, "*.dll", SearchOption.AllDirectories));

                scripts = scripts
                    .Concat(this.GetNugetPropsInterceptorPaths())
                    .Concat(this.GetNugetJsonInterceptorPaths())
                    .Distinct(new ScriptNameEqualityComparer());

                builder.Log(LogTypes.Info, "Found Custom interceptors");
                foreach (var interceptorPath in scripts)
                    builder.Log(LogTypes.Info, "- " + interceptorPath);

                scriptBinaries.AddRange(scripts.Select(x => this.LoadScript(x)));

                foreach (var scriptBinary in scriptBinaries
                            .SelectMany(x => x.DefinedTypes)
                            .Where(x => x.GetMethods(BindingFlags.Public | BindingFlags.Static).Length > 0)
                            .Select(x => new
                            {
                                Type = x,
                                Priority = (int)(x.GetField("Priority", BindingFlags.Public | BindingFlags.Static)?.GetValue(null) ?? int.MaxValue),
                                Name = x.GetField("Name", BindingFlags.Public | BindingFlags.Static)?.GetValue(null) as string ?? x.Name,
                                Implement = x.GetMethods(BindingFlags.Public | BindingFlags.Static)
                                    .Select(y => new
                                    {
                                        MethodInfo = y,
                                        Parameters = y.GetParameters()
                                    })
                                    .Where(y => y.Parameters.Length == 1 && y.Parameters[0].ParameterType.FullName == typeof(Builder).FullName)
                                    .OrderBy(y => y.MethodInfo.Name)
                                    .ToArray()
                            })
                            .OrderBy(x => x.Priority))
                {
                    var speed = new StopwatchLog(this, scriptBinary.Name);

                    try
                    {
                        this.Log(LogTypes.Info, ">> Executing custom interceptors in: " + scriptBinary.Name);
                        var config = scriptBinary.Type.GetProperty("Config", BindingFlags.Static | BindingFlags.Public);
                        var projectDirectoryPath = scriptBinary.Type.GetProperty("ProjectDirectoryPath", BindingFlags.Static | BindingFlags.Public);
                        var solutionDirectoryPath = scriptBinary.Type.GetProperty("SolutionDirectoryPath", BindingFlags.Static | BindingFlags.Public);

                        if (config != null) config.SetValue(null, this.Config);
                        if (projectDirectoryPath != null) projectDirectoryPath.SetValue(null, this.ProjectDirectoryPath);
                        if (solutionDirectoryPath != null) solutionDirectoryPath.SetValue(null, this.SolutionDirectoryPath);

                        foreach (var method in scriptBinary.Implement)
                        {
                            var display = method.MethodInfo.GetCustomAttributes().FirstOrDefault(x => x.GetType().FullName == typeof(DisplayAttribute).FullName);
                            var name = display?.GetType()?.GetProperty("Name")?.GetValue(display) as string ?? method.MethodInfo.Name;

                            this.Log(LogTypes.Info, "   Executing custom interceptor: " + name);
                            method.MethodInfo.Invoke(null, new object[] { builder });
                        }
                    }
                    catch (ArgumentException e)
                    {
                        throw new Exception("Unable to execute the script. Possible wrong version.", e);
                    }
                    catch (InvalidCastException e)
                    {
                        throw new Exception("Unable to execute the script. Possible wrong version.", e);
                    }
                    catch
                    {
                        throw;
                    }
                    finally
                    {
                        speed.Dispose();
                    }
                }
            }
        }

        private IEnumerable<string> GetCustomInterceptorList()
        {
            var element = this.Config.Element("CustomInterceptors");

            if (element == null)
                yield break;

            foreach (var item in element.Value.Split(new[] { "\r\n", "\n", ", ", " " }, StringSplitOptions.RemoveEmptyEntries))
            {
                var path = this.GetFullPath(item);

                if (string.IsNullOrEmpty(path))
                    continue;

                var dlls = Directory.GetFiles(Path.GetDirectoryName(path), Path.GetFileName(path));

                if (dlls == null || dlls.Length == 0)
                    throw new FileNotFoundException("File not found: " + path);

                for (int i = 0; i < dlls.Length; i++)
                    yield return dlls[i];
            }
        }

        private IEnumerable<string> GetNugetJsonInterceptorPaths()
        {
            var projectObjPath = Path.Combine(this.ProjectDirectoryPath, "obj");
            if (!Directory.Exists(projectObjPath))
                yield break;

            var nugetFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget\\packages\\");
            var jsonFile = Directory.GetFiles(projectObjPath, "project.assets.json", SearchOption.TopDirectoryOnly).FirstOrDefault();

            if (jsonFile == null)
                yield break;

            var jObject = JsonConvert.DeserializeObject(File.ReadAllText(jsonFile)) as JObject;

            foreach (var item in jObject
                .GetChildren<JProperty>(x => x.Name == "targets")
                .SelectMany(x => x.GetChildren())
                .SelectMany(x => x.GetChildren())
                .SelectMany(x => x.GetChildren())
                .SelectMany(x => x.GetChildren())
                .SelectMany(x => x.GetChildren())
                .SelectMany(x => x.GetChildren<JProperty>(y => y.Name == "contentFiles"))
                .SelectMany(x => x.GetChildren())
                .SelectMany(x => x.GetChildren<JProperty>(y => y.Name.IndexOf(@"contentFiles/any/any/Interceptors/", StringComparison.InvariantCultureIgnoreCase) >= 0))
                .Select(x => Path.Combine(nugetFolder, (x.Parent.Parent.Parent.Parent as JProperty).Name, (x as JProperty).Name).Replace('/', '\\'))
                .Distinct())
                yield return item;
        }

        private IEnumerable<string> GetNugetPropsInterceptorPaths()
        {
            var projectObjPath = Path.Combine(this.ProjectDirectoryPath, "obj");
            if (!Directory.Exists(projectObjPath))
                yield break;

            var nugetFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget\\packages\\");
            var path = Directory.GetFiles(projectObjPath, "*.csproj.nuget.g.props", SearchOption.TopDirectoryOnly).FirstOrDefault();

            if (path == null)
                yield break;

            var xml = new XmlDocument();
            xml.Load(path);

            foreach (XmlNode item in xml.LastChild.ChildNodes)
            {
                if (item.Name != "ItemGroup")
                    continue;

                foreach (XmlNode itemGroup in item.ChildNodes)
                {
                    var value = itemGroup.Attributes["Include"]?.Value;
                    if (!string.IsNullOrEmpty(value) && value.IndexOf(@"\contentFiles\any\any\Interceptors\", StringComparison.InvariantCultureIgnoreCase) >= 0)
                        yield return value.Replace("$(NuGetPackageRoot)", nugetFolder);
                }
            }
        }

        private Assembly LoadScript(string path)
        {
            switch (Path.GetExtension(path))
            {
                case ".csx":
                case ".CSX":
                    this.Log(LogTypes.Info, "Compiling: " + path);
                    return CSScript.LoadCode(File.ReadAllText(path), this.referencedDlls.ToArray());

                case ".dll":
                case ".DLL": return AppDomain.CurrentDomain.Load(File.ReadAllBytes(path));
            }

            throw new NotSupportedException("Unsupported file type");
        }

        private class ScriptNameEqualityComparer : IEqualityComparer<string>
        {
            public bool Equals(string x, string y) =>
                string.Equals(Path.GetFileName(x), Path.GetFileName(y), StringComparison.InvariantCultureIgnoreCase) &&
                    new FileInfo(x).Length == new FileInfo(y).Length;

            public int GetHashCode(string obj) => Path.GetFileName(obj).ToLower().GetHashCode();
        }
    }
}


text:
A light-weight cryptography library.

Cryptor provides an easy to use interface for encryption and decryption. Also the library follows OOP patterns, therefore provides more control to those who uses it.

Currently only one cryptographic algorithm is made available, the "Caesar Cipher". However, more algorithms will be added soon.

This project is created while learning Cryptography with Python. So, it will take time to have more algorithms implemented. Also, the existing one's will be improved time to time.

To those who understands how useful cryptography is,
LUQVf! (Key = 7) ;)


text:
extern Editor editor;

void canvas_callback(Fl_Widget* canvas, void*)
{
}

void add_expression_callback(Fl_Widget* button, void*)
{
    const char* result = fl_input("Add new expression", "");
    if (result != nullptr) {
        // TODO: Check that the new name is valid!
        editor.addExpression(result);
    }
}

void remove_expression_callback(Fl_Widget* button, void*)
{
    editor.removeSelectedExpression();
}

void move_expression_up_callback(Fl_Widget* button, void*)
{
    editor.moveSelectedExpressionUp();
}

void move_expression_down_callback(Fl_Widget* button, void*)
{
    editor.moveSelectedExpressionDown();
}

void browser_event_callback(Fl_Widget* widget, void*)
{
    Fl_Browser* browser = (Fl_Browser*)widget;
    int selectedLine = browser->value();
    if (selectedLine > 0) {
        const char* name = browser->text(selectedLine);
        if (Fl::event_clicks() == 0) {
            editor.selectExpression(name);
        }
        else {
            const char* newName = fl_input("New name of the expression", name);
            if (newName != nullptr) {
                // TODO: Check that the name is valid!
                editor.renameExpression(name, newName);
                browser->text(selectedLine, newName);
            }
        }
    }
}

void open_grammar_callback(Fl_Widget* widget, void*)
{
    if (editor.hasGrammarPath() == false) {
        Fl_File_Chooser* fileChooser = new Fl_File_Chooser("", "", Fl_File_Chooser::SINGLE, "Open a grammar");
        fileChooser->callback(file_chooser_for_opening_callback);
        fileChooser->show();
    }
    else {
        fl_message("A grammar already has opened!");
    }
}

void save_grammar_callback(Fl_Widget* widget, void*)
{
    if (editor.hasGrammarPath() == true) {
        editor.saveGrammar();
    }
    else {
        Fl_File_Chooser* fileChooser = new Fl_File_Chooser("", "", Fl_File_Chooser::CREATE, "Save the grammar");
        fileChooser->callback(file_chooser_for_saving_callback);
        fileChooser->show();
    }
}

void file_chooser_for_opening_callback(Fl_File_Chooser* widget, void*)
{
    if (widget->shown() == false && widget->value() != nullptr) {
        editor.setGrammarPath(widget->value());
        editor.openGrammar();
    }
}

void file_chooser_for_saving_callback(Fl_File_Chooser* widget, void*)
{
    if (widget->shown() == false && widget->value() != nullptr) {
        editor.setGrammarPath(widget->value());
        editor.saveGrammar();
    }
}


text:
package de.terrestris.shogun2.model.token;

import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import de.terrestris.shogun2.model.User;

/**
 * A {@link Token} instance that has a one-to-one relation to a {@link User}
 * that wants to register.
 *
 * @author Daniel Koch
 * @author Nils Bühner
 */
@Entity
@Table
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class RegistrationToken extends UserToken {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    /**
     * Default constructor
     */
    public RegistrationToken() {
    }

    /**
     * Constructor that uses the default expiration time.
     */
    public RegistrationToken(User user) {
        super(user);
    }

    /**
     * Constructor that uses the passed values
     */
    public RegistrationToken(User user, int expirationInMinutes) {
        super(user, expirationInMinutes);
    }

}


text:
class AssignmentFile < ApplicationRecord
  include IsReleased

  # A brief description of the resource. E.g., "PS1 Solutions".
  validates :description, length: 1..64, presence: true

  # The wrapped file.
  has_file_blob :file, allows_nil: false, blob_model: 'FileBlob'

  # Refuse to serve active content from the site.
  validates :file_mime_type, exclusion: {
      in: ['text/html', 'application/xhtml+xml'] }

  # The relevant assignment.
  belongs_to :assignment, inverse_of: :files
  validates :assignment, presence: true

  # The course for which this file has been uploaded.
  has_one :course, through: :assignment

  # True if the file's release date has passed.
  def released?
    !!released_at && (released_at < Time.current)
  end

  # True if the given user is allowed to see this file.
  #
  # TODO(spark008): Add checks to this and other model permission methods to
  #     ensure that the user is a student registered for the course.
  def can_read?(user)
    (released? && assignment.released_for_student?(user)) ||
        assignment.can_edit?(user)
  end

  # The default release date for a particular resource file.
  #
  # This same method should also be defined for Assignment.
  def default_released_at
    assignment.released_at || self.class.default_released_at
  end
end


text:
ACCEPTED

#### According to
The Catalogue of Life, 3rd January 2011

#### Published in
Stud. Mycol. 5: 49 (1973)

#### Original name
Melanops concinna Syd., 1926

### Remarks
null


text:
require 'spec_helper'

describe Spree::Variant do

  let(:currency) { "USD" }

  describe '#price_in' do

    context "returns the sale price if it is present" do
      let(:variant) { FactoryGirl.create(:onsale_variant, :sale_price => 2000) }
      let(:expected) { Spree::Price.new(:variant_id => variant.id, :currency => currency, :amount => variant.sale_price) }
      let(:result) { variant.price_in(currency) }

      subject { result }
      its(:variant_id) { should eq expected.variant_id }
      its(:amount) { should eq expected.amount }
      its(:currency) { should eq expected.currency }
    end

    context "returns the normal price if it is not on sale" do
      let(:variant) { FactoryGirl.create(:onsale_variant, :price => 2500) }
      let(:expected) { Spree::Price.new(:variant_id => variant.id, :currency => currency, :amount => variant.price) }
      let(:result) { variant.price_in(currency) }

      subject { result }
      its(:variant_id) { should eq expected.variant_id }
      its(:amount) { should eq expected.amount }
      its(:currency) { should eq expected.currency }
    end

  end
end


text:
<?php

/**
 * Finnish (Finland) language pack
 * @package sapphire
 * @subpackage i18n
 */

i18n::include_locale_file('sapphire', 'en_US');

global $lang;

if(array_key_exists('fi_FI', $lang) && is_array($lang['fi_FI'])) {
	$lang['fi_FI'] = array_merge($lang['en_US'], $lang['fi_FI']);
} else {
	$lang['fi_FI'] = $lang['en_US'];
}

$lang['fi_FI']['AdvancedSearchForm']['ALLWORDS'] = 'Kaikki sanat';
$lang['fi_FI']['AdvancedSearchForm']['ATLEAST'] = 'Vähintään yksi sanoista';
$lang['fi_FI']['AdvancedSearchForm']['EXACT'] = 'Täsmällinen lause';
$lang['fi_FI']['AdvancedSearchForm']['FROM'] = 'Lähettäjä';
$lang['fi_FI']['AdvancedSearchForm']['GO'] = 'Mene';
$lang['fi_FI']['AdvancedSearchForm']['LASTUPDATED'] = 'Viimeeksi päivitetty';
$lang['fi_FI']['AdvancedSearchForm']['LASTUPDATEDHEADER'] = 'VIIMEEKSI PÄIVITETTY';
$lang['fi_FI']['AdvancedSearchForm']['PAGETITLE'] = 'Sivun otsikko';
$lang['fi_FI']['AdvancedSearchForm']['RELEVANCE'] = 'Asiaankuuluvuus';
$lang['fi_FI']['AdvancedSearchForm']['SEARCHBY'] = 'HAE EHDOILLA';
$lang['fi_FI']['AdvancedSearchForm']['SORTBY'] = 'JÄRJESTÄ TULOKSET ';
$lang['fi_FI']['AdvancedSearchForm']['TO'] = 'Vastaanottaja';
$lang['fi_FI']['AdvancedSearchForm']['WITHOUT'] = 'Ilman sanoja';
$lang['fi_FI']['BasicAuth']['ENTERINFO'] = 'Anna käyttäjänimi ja salasana';
$lang['fi_FI']['BasicAuth']['ERRORNOTADMIN'] = 'Tämä käyttäjä ei ole ylläpitäjä';
$lang['fi_FI']['BasicAuth']['ERRORNOTREC'] = 'Tätä käyttäjänimeä/salasanaa ei tunnistettu.';
$lang['fi_FI']['BBCodeParser']['ALIGNEMENT'] = 'Tasaus';
$lang['fi_FI']['BBCodeParser']['ALIGNEMENTEXAMPLE'] = 'tasattu oikealle';
$lang['fi_FI']['BBCodeParser']['BOLD'] = 'Lihavoitu teksti';
$lang['fi_FI']['BBCodeParser']['BOLDEXAMPLE'] = 'Lihavoitu';
$lang['fi_FI']['BBCodeParser']['COLORED'] = 'Väritetty teksti';
$lang['fi_FI']['BBCodeParser']['COLOREDEXAMPLE'] = 'sininen teksti';
$lang['fi_FI']['BBCodeParser']['EMAILLINKDESCRIPTION'] = 'Luo linkki sähköpostiosoitteeseen';
$lang['fi_FI']['BBCodeParser']['IMAGE'] = 'Kuva';
$lang['fi_FI']['BBCodeParser']['IMAGEDESCRIPTION'] = 'Näytä kuva viestissäsi';
$lang['fi_FI']['BBCodeParser']['ITALIC'] = 'Kursivoitu teksti';
$lang['fi_FI']['BBCodeParser']['ITALICEXAMPLE'] = 'Kursiivi';
$lang['fi_FI']['BBCodeParser']['LINK'] = 'Verkkosivun linkki';
$lang['fi_FI']['BBCodeParser']['LINKDESCRIPTION'] = 'Linkki toiselle verkkosivustolle tai URLiin ';
$lang['fi_FI']['BBCodeParser']['STRUCK'] = 'Yliviivattu teksti';
$lang['fi_FI']['BBCodeParser']['STRUCKEXAMPLE'] = 'Yliviivaa';
$lang['fi_FI']['BBCodeParser']['UNDERLINE'] = 'Alleviivattu teksti';
$lang['fi_FI']['BBCodeParser']['UNDERLINEEXAMPLE'] = 'Alleviivaa';
$lang['fi_FI']['BBCodeParser']['UNORDERED'] = 'Järjestämätön lista';
$lang['fi_FI']['BBCodeParser']['UNORDEREDDESCRIPTION'] = 'Järjestämätön lista';
$lang['fi_FI']['BBCodeParser']['UNORDEREDEXAMPLE1'] = 'järjestämätön lista 1';
$lang['fi_FI']['ChangePasswordEmail.ss']['CHANGEPASSWORDTEXT1'] = 'Vaihdoit salasanasi osoitteelle';
$lang['fi_FI']['ChangePasswordEmail.ss']['CHANGEPASSWORDTEXT2'] = 'Kirjautuaksesi sisään voit käyttää seuraavia tietoja:';
$lang['fi_FI']['ChangePasswordEmail.ss']['EMAIL'] = 'Sähköposti';
$lang['fi_FI']['ChangePasswordEmail.ss']['HELLO'] = 'Hei';
$lang['fi_FI']['ChangePasswordEmail.ss']['PASSWORD'] = 'Salasana';
$lang['fi_FI']['ComplexTableField.ss']['ADDITEM'] = 'Lisää';
$lang['fi_FI']['ComplexTableField.ss']['NOITEMSFOUND'] = 'Kohteita ei löytynyt';
$lang['fi_FI']['ComplexTableField.ss']['SORTASC'] = 'Nouseva järjestys';
$lang['fi_FI']['ComplexTableField.ss']['SORTDESC'] = 'Laskeva järjestys';
$lang['fi_FI']['ComplexTableField']['SUCCESSADD'] = 'Lisätty %s %s %s';
$lang['fi_FI']['ComplexTableField']['SUCCESSEDIT'] = 'Tallennettu %s %s %s';
$lang['fi_FI']['ComplexTableField_popup.ss']['NEXT'] = 'Seuraava';
$lang['fi_FI']['ComplexTableField_popup.ss']['PREVIOUS'] = 'Edellinen';
$lang['fi_FI']['CompositeDateField']['DAY'] = 'Päivä';
$lang['fi_FI']['CompositeDateField']['DAYJS'] = 'päivä';
$lang['fi_FI']['CompositeDateField']['MONTH'] = 'Kuukausi';
$lang['fi_FI']['CompositeDateField']['MONTHJS'] = 'kuukausi';
$lang['fi_FI']['CompositeDateField']['VALIDATIONJS1'] = 'Varmista että olet asettanut';
$lang['fi_FI']['CompositeDateField']['VALIDATIONJS2'] = 'oikein';
$lang['fi_FI']['CompositeDateField']['YEARJS'] = 'vuosi';
$lang['fi_FI']['ConfirmedFormAction']['CONFIRMATION'] = 'Oletko aivan varma?';
$lang['fi_FI']['ConfirmedPasswordField']['ATLEAST'] = 'Salasanojen pitää olla vähintään %s merkkiä pitkä.';
$lang['fi_FI']['ConfirmedPasswordField']['BETWEEN'] = 'Salasanojen pitää olla %s-%s merkkiä pitkät.';
$lang['fi_FI']['ConfirmedPasswordField']['HAVETOMATCH'] = 'Salasanojen on oltava samat.';
$lang['fi_FI']['ConfirmedPasswordField']['LEASTONE'] = 'Salasanoissa pitää olla vähintään yksi numero ja yksi alfanumeerinen merkki.';
$lang['fi_FI']['ConfirmedPasswordField']['MAXIMUM'] = 'Salasanojen pitää olla korkeintaan %s merkkiä pitkät.';
$lang['fi_FI']['ConfirmedPasswordField']['NOEMPTY'] = 'Salasanat eivät voi olla tyhjiä.';
$lang['fi_FI']['ConfirmedPasswordField']['SHOWONCLICKTITLE'] = 'Vaihda salasana';
$lang['fi_FI']['ContentController']['DRAFT_SITE_ACCESS_RESTRICTION'] = 'Voidaksesi katsella luonnoksia tai arkistoitua sisältöä sinun täytyy kirjautua sisään CMS:n salasanallasi. Palataksesi julkiselle sivulle paina tästä.';
$lang['fi_FI']['Controller']['FILE'] = 'Tiedosto';
$lang['fi_FI']['Controller']['IMAGE'] = 'Kuva';
$lang['fi_FI']['CreditCardField']['FIRST'] = 'ensimmäinen';
$lang['fi_FI']['CreditCardField']['FOURTH'] = 'neljäs';
$lang['fi_FI']['CreditCardField']['SECOND'] = 'toinen';
$lang['fi_FI']['CreditCardField']['THIRD'] = 'kolmas';
$lang['fi_FI']['CreditCardField']['VALIDATIONJS1'] = 'Varmista että olet syöttänyt ';
$lang['fi_FI']['CreditCardField']['VALIDATIONJS2'] = 'luottokorttinumeron oikein.';
$lang['fi_FI']['CurrencyField']['CURRENCYSYMBOL'] = '$';
$lang['fi_FI']['DataObject']['PLURALNAME'] = 'Dataobjektit';
$lang['fi_FI']['DataObject']['SINGULARNAME'] = 'Dataobjekti';
$lang['fi_FI']['Date']['DAY'] = 'päivä';
$lang['fi_FI']['Date']['DAYS'] = ' päivää ';
$lang['fi_FI']['Date']['HOUR'] = ' tunti';
$lang['fi_FI']['Date']['HOURS'] = ' tuntia';
$lang['fi_FI']['Date']['MIN'] = 'min';
$lang['fi_FI']['Date']['MINS'] = 'min.';
$lang['fi_FI']['Date']['MONTH'] = 'kuukausi';
$lang['fi_FI']['Date']['MONTHS'] = 'kuukaudet';
$lang['fi_FI']['Date']['SEC'] = 'sek.';
$lang['fi_FI']['Date']['SECS'] = 'sek.';
$lang['fi_FI']['Date']['TIMEDIFFAGO'] = ' sitten';
$lang['fi_FI']['Date']['TIMEDIFFAWAY'] = ' poissa';
$lang['fi_FI']['Date']['YEAR'] = 'vuosi';
$lang['fi_FI']['Date']['YEARS'] = 'vuodet';
$lang['fi_FI']['DateField']['NOTSET'] = 'ei asetettu';
$lang['fi_FI']['DateField']['TODAY'] = 'tänään';
$lang['fi_FI']['DateField']['VALIDATIONJS'] = 'Ole hyvä ja syötä hyväksytty päivämäärä (DD/MM/VVVV).';
$lang['fi_FI']['DateField']['VALIDDATEFORMAT'] = 'Anna päivämäärä oikeassa muodossa (PP/KK/VVVV).';
$lang['fi_FI']['DMYDateField']['VALIDDATEFORMAT'] = 'Ole hyvä ja syötä hyväksytty päivämäärä (PP-KK-VVVV).';
$lang['fi_FI']['DropdownField']['CHOOSE'] = '(Valitse)';
$lang['fi_FI']['EmailField']['VALIDATION'] = 'Kirjoita sähköpostiosoite.';
$lang['fi_FI']['EmailField']['VALIDATIONJS'] = 'Ole hyvä ja syötä sähköpostiosoite.';
$lang['fi_FI']['ErrorPage']['400'] = '400 - Virheellinen Pyyntö';
$lang['fi_FI']['ErrorPage']['404'] = '404 - Ei löytynyt';
$lang['fi_FI']['ErrorPage']['408'] = '408 - Pyyntö Aikakatkaistiin';
$lang['fi_FI']['ErrorPage']['409'] = '409 - Ristiriita';
$lang['fi_FI']['ErrorPage']['414'] = '414 - Pyyntö-URI Liian Pitkä';
$lang['fi_FI']['ErrorPage']['500'] = '500 - Sisäinen Palvelin Virhe';
$lang['fi_FI']['ErrorPage']['502'] = '502 - Virheellinen Yhdyskäytävä';
$lang['fi_FI']['ErrorPage']['505'] = '505 - HTTP Versio Ei Tuettu';
$lang['fi_FI']['ErrorPage']['CODE'] = 'Virhekoodi';
$lang['fi_FI']['ErrorPage']['DEFAULTERRORPAGECONTENT'] = '
Valitettavasti sivua johon yritit päästä ei löytynyt.

Tarkista haluamasi kohteen URLin kirjoitusasu ja yritä uudelleen.
';
$lang['fi_FI']['ErrorPage']['DEFAULTERRORPAGETITLE'] = 'Sivua ei löytynyt';
$lang['fi_FI']['ErrorPage']['PLURALNAME'] = 'Virhesivut';
$lang['fi_FI']['ErrorPage']['SINGULARNAME'] = 'Virhesivu';
$lang['fi_FI']['File']['INVALIDEXTENSION'] = 'Laajennus ei ole mahdollinen (esim: %s)';
$lang['fi_FI']['File']['NOFILESIZE'] = 'Tiedostokoko on nolla tavua.';
$lang['fi_FI']['File']['PLURALNAME'] = 'Tiedostot';
$lang['fi_FI']['File']['SINGULARNAME'] = 'Tiedosto';
$lang['fi_FI']['File']['TOOLARGE'] = 'Tiedosto on liian iso, %s on suurin sallittu.';
$lang['fi_FI']['Folder']['CREATED'] = 'Ensimmäinen kopioitu palvelimelle';
$lang['fi_FI']['Folder']['DELETEUNUSEDTHUMBNAILS'] = 'Poista käyttämättömät pikkukuvat';
$lang['fi_FI']['Folder']['DELSELECTED'] = 'Poista valitut tiedostot';
$lang['fi_FI']['Folder']['DETAILSTAB'] = 'Tietoja';
$lang['fi_FI']['Folder']['FILENAME'] = 'Tiedostonimi';
$lang['fi_FI']['Folder']['FILESTAB'] = 'Tiedostot';
$lang['fi_FI']['Folder']['LASTEDITED'] = 'Viimeeksi päivitetty';
$lang['fi_FI']['Folder']['PLURALNAME'] = 'Tiedostot';
$lang['fi_FI']['Folder']['SINGULARNAME'] = 'Tiedosto';
$lang['fi_FI']['Folder']['TITLE'] = 'Otsikko';
$lang['fi_FI']['Folder']['TYPE'] = 'Tyyppi';
$lang['fi_FI']['Folder']['UNUSEDFILESTAB'] = 'Käyttämättömät tiedostot';
$lang['fi_FI']['Folder']['UNUSEDFILESTITLE'] = 'Käyttämättömät tiedostot';
$lang['fi_FI']['Folder']['UNUSEDTHUMBNAILSTITLE'] = 'Käyttämättömät pikkukuvat';
$lang['fi_FI']['Folder']['UPLOADTAB'] = 'Kopioi palvelimelle';
$lang['fi_FI']['Folder']['URL'] = 'URL';
$lang['fi_FI']['ForgotPasswordEmail.ss']['HELLO'] = 'Hei';
$lang['fi_FI']['Form']['DATENOTSET'] = '(Päivämäärää ei ole asetettu)';
$lang['fi_FI']['Form']['FIELDISREQUIRED'] = '%s tarvitaan.';
$lang['fi_FI']['Form']['LANGAOTHER'] = 'Muut kielet';
$lang['fi_FI']['Form']['LANGAVAIL'] = 'Käytettävissä olevat kielet';
$lang['fi_FI']['Form']['NOTSET'] = '(ei asetettu)';
$lang['fi_FI']['Form']['VALIDATIONALLDATEVALUES'] = 'Varmista, että olet asettanut kaikki päivämäärät.';
$lang['fi_FI']['Form']['VALIDATIONBANKACC'] = 'Syötä kelvollinen pankkinumero';
$lang['fi_FI']['Form']['VALIDATIONCREDITNUMBER'] = 'Varmista, että olet syöttänyt luottokortin %s numeron oikein.';
$lang['fi_FI']['Form']['VALIDATIONFAILED'] = 'Varmistus epäonnistui';
$lang['fi_FI']['Form']['VALIDATIONNOTUNIQUE'] = 'Syötetty arvo ei ole yksilöllinen';
$lang['fi_FI']['Form']['VALIDATIONPASSWORDSDONTMATCH'] = 'Salasanat eivät täsmää';
$lang['fi_FI']['Form']['VALIDATIONPASSWORDSNOTEMPTY'] = 'Salasana ei voi olla tyhjä';
$lang['fi_FI']['Form']['VALIDATIONSTRONGPASSWORD'] = 'Salasanan täytyy sisältää vähintään yksi numero ja yksi kirjain.';
$lang['fi_FI']['Form']['VALIDCURRENCY'] = 'Syötä kelvollinen valuutta.';
$lang['fi_FI']['FormField']['NONE'] = 'Ei yhtään';
$lang['fi_FI']['GhostPage']['NOLINKED'] = 'Tällä haamusivulla ei ole linkitettyä sivua.';
$lang['fi_FI']['GhostPage']['PLURALNAME'] = 'Haamusivut';
$lang['fi_FI']['GhostPage']['SINGULARNAME'] = 'Haamusivu';
$lang['fi_FI']['Group']['Code'] = 'Ryhmän koodi';
$lang['fi_FI']['Group']['has_many_Permissions'] = 'Luvat';
$lang['fi_FI']['Group']['Locked'] = 'Lukittu?';
$lang['fi_FI']['Group']['many_many_Members'] = 'Jäsenet';
$lang['fi_FI']['Group']['Parent'] = 'Yliryhmä';
$lang['fi_FI']['Group']['PLURALNAME'] = 'Ryhmät';
$lang['fi_FI']['Group']['SINGULARNAME'] = 'Ryhmä';
$lang['fi_FI']['GSTNumberField']['VALIDATION'] = 'Anna kelvollinen GST-numero';
$lang['fi_FI']['GSTNumberField']['VALIDATIONJS'] = 'Ole hyvä ja syötä voimassaoleva GST-numero.';
$lang['fi_FI']['HtmlEditorField']['ALTTEXT'] = 'Kuvaus';
$lang['fi_FI']['HtmlEditorField']['ANCHOR'] = 'Lisää/muokkaa ankkuri(a)';
$lang['fi_FI']['HtmlEditorField']['ANCHORVALUE'] = 'Ankkuri';
$lang['fi_FI']['HtmlEditorField']['BULLETLIST'] = 'Luettelomerkit';
$lang['fi_FI']['HtmlEditorField']['BUTTONALIGNCENTER'] = 'Keskitetty';
$lang['fi_FI']['HtmlEditorField']['BUTTONALIGNJUSTIFY'] = 'Levitä vaakasuunnassa';
$lang['fi_FI']['HtmlEditorField']['BUTTONALIGNLEFT'] = 'Tasaa vasemmalle';
$lang['fi_FI']['HtmlEditorField']['BUTTONALIGNRIGHT'] = 'Tasaa oikealle';
$lang['fi_FI']['HtmlEditorField']['BUTTONBOLD'] = 'Lihavoitu (Ctrl+B)';
$lang['fi_FI']['HtmlEditorField']['BUTTONINSERTFLASH'] = 'Lisää Flash-video';
$lang['fi_FI']['HtmlEditorField']['BUTTONINSERTIMAGE'] = 'Lisää kuva';
$lang['fi_FI']['HtmlEditorField']['BUTTONINSERTLINK'] = 'Lisää linkki';
$lang['fi_FI']['HtmlEditorField']['BUTTONITALIC'] = 'Kursivoitu (Ctrl+I)';
$lang['fi_FI']['HtmlEditorField']['BUTTONREMOVELINK'] = 'Poista linkki';
$lang['fi_FI']['HtmlEditorField']['BUTTONSTRIKE'] = 'Yliviivattu';
$lang['fi_FI']['HtmlEditorField']['BUTTONUNDERLINE'] = 'Alleviivattu (Ctrl+U)';
$lang['fi_FI']['HtmlEditorField']['CHARMAP'] = 'Lisää merkki';
$lang['fi_FI']['HtmlEditorField']['CLOSE'] = 'sulje';
$lang['fi_FI']['HtmlEditorField']['COPY'] = 'Kopioi (Ctrl+C)';
$lang['fi_FI']['HtmlEditorField']['CREATEFOLDER'] = 'luo kansio';
$lang['fi_FI']['HtmlEditorField']['CSSCLASS'] = 'Tasaus/tyyli';
$lang['fi_FI']['HtmlEditorField']['CSSCLASSCENTER'] = 'Keskellä omillaan.';
$lang['fi_FI']['HtmlEditorField']['CSSCLASSLEFT'] = 'Vasemmalla, tekstin ympäröimänä.';
$lang['fi_FI']['HtmlEditorField']['CSSCLASSLEFTALONE'] = 'Vasemmalla, yksinään.';
$lang['fi_FI']['HtmlEditorField']['CSSCLASSRIGHT'] = 'Oikealla, tesktin ympätöimänä.';
$lang['fi_FI']['HtmlEditorField']['CUT'] = 'Leikkaa (Ctrl+X)';
$lang['fi_FI']['HtmlEditorField']['DELETECOL'] = 'Poista sarake';
$lang['fi_FI']['HtmlEditorField']['DELETEROW'] = 'Poista rivi';
$lang['fi_FI']['HtmlEditorField']['EDITCODE'] = 'Muokkaa HTML-koodia';
$lang['fi_FI']['HtmlEditorField']['EMAIL'] = 'Sähköpostiosoite';
$lang['fi_FI']['HtmlEditorField']['FILE'] = 'Tiedosto';
$lang['fi_FI']['HtmlEditorField']['FLASH'] = 'Lisää flash-video';
$lang['fi_FI']['HtmlEditorField']['FOLDER'] = 'Kansio';
$lang['fi_FI']['HtmlEditorField']['FOLDERCANCEL'] = 'peruuta';
$lang['fi_FI']['HtmlEditorField']['FORMATADDR'] = 'Osoite';
$lang['fi_FI']['HtmlEditorField']['FORMATH1'] = 'Otsikko 1';
$lang['fi_FI']['HtmlEditorField']['FORMATH2'] = 'Otsikko 2';
$lang['fi_FI']['HtmlEditorField']['FORMATH3'] = 'Otsikko 3';
$lang['fi_FI']['HtmlEditorField']['FORMATH4'] = 'Otsikko 4';
$lang['fi_FI']['HtmlEditorField']['FORMATH5'] = 'Otsikko 5';
$lang['fi_FI']['HtmlEditorField']['FORMATH6'] = 'Otsikko 6';
$lang['fi_FI']['HtmlEditorField']['FORMATP'] = 'Kappale';
$lang['fi_FI']['HtmlEditorField']['FORMATPRE'] = 'Esimuotoiltu';
$lang['fi_FI']['HtmlEditorField']['HR'] = 'Lisää vaakasuora viiva';
$lang['fi_FI']['HtmlEditorField']['IMAGE'] = 'Lisää kuva';
$lang['fi_FI']['HtmlEditorField']['IMAGEDIMENSIONS'] = 'Mitat';
$lang['fi_FI']['HtmlEditorField']['IMAGEHEIGHTPX'] = 'Korkeus';
$lang['fi_FI']['HtmlEditorField']['IMAGEWIDTHPX'] = 'Leveys';
$lang['fi_FI']['HtmlEditorField']['INDENT'] = 'Lisää sisennystä';
$lang['fi_FI']['HtmlEditorField']['INSERTCOLAFTER'] = 'Lisää sarake alas';
$lang['fi_FI']['HtmlEditorField']['INSERTCOLBEF'] = 'Lisää sarake ylös';
$lang['fi_FI']['HtmlEditorField']['INSERTROWAFTER'] = 'Lisää rivi alas';
$lang['fi_FI']['HtmlEditorField']['INSERTROWBEF'] = 'Lisää rivi ylös';
$lang['fi_FI']['HtmlEditorField']['INSERTTABLE'] = 'Lisää taulukko';
$lang['fi_FI']['HtmlEditorField']['LINK'] = 'Lisää/muokkaa linkki(ä) valittuun tekstiin';
$lang['fi_FI']['HtmlEditorField']['LINKANCHOR'] = 'Ankkuroi tähän sivuun';
$lang['fi_FI']['HtmlEditorField']['LINKDESCR'] = 'Linkin kuvaus';
$lang['fi_FI']['HtmlEditorField']['LINKEMAIL'] = 'Sähköpostiosoite';
$lang['fi_FI']['HtmlEditorField']['LINKEXTERNAL'] = 'Toinen verkkosivusto';
$lang['fi_FI']['HtmlEditorField']['LINKFILE'] = 'Lataa tiedosto';
$lang['fi_FI']['HtmlEditorField']['LINKINTERNAL'] = 'Sivu sivustolla';
$lang['fi_FI']['HtmlEditorField']['LINKOPENNEWWIN'] = 'Avataanko linkki uudessa ikkunassa?';
$lang['fi_FI']['HtmlEditorField']['LINKTO'] = 'Linkki';
$lang['fi_FI']['HtmlEditorField']['OK'] = 'ok';
$lang['fi_FI']['HtmlEditorField']['OL'] = 'Numerointi';
$lang['fi_FI']['HtmlEditorField']['OUTDENT'] = 'Vähennä sisennystä';
$lang['fi_FI']['HtmlEditorField']['PAGE'] = 'Sivu';
$lang['fi_FI']['HtmlEditorField']['PASTE'] = 'Liitä (Ctrl+V)';
$lang['fi_FI']['HtmlEditorField']['PASTETEXT'] = 'Liitä pelkkää tekstiä';
$lang['fi_FI']['HtmlEditorField']['PASTEWORD'] = 'Liitä Wordista';
$lang['fi_FI']['HtmlEditorField']['REDO'] = 'Tee uudelleen (Ctrl+Y)';
$lang['fi_FI']['HtmlEditorField']['SELECTALL'] = 'Valitse kaikki (Ctrl+A)';
$lang['fi_FI']['HtmlEditorField']['UNDO'] = 'Kumoa (Ctrl+Z)';
$lang['fi_FI']['HtmlEditorField']['UNLINK'] = 'Poista linkki';
$lang['fi_FI']['HtmlEditorField']['UPLOAD'] = 'lisää palvelimelle uusi tiedosto';
$lang['fi_FI']['HtmlEditorField']['URL'] = 'URL-osoite';
$lang['fi_FI']['HtmlEditorField']['VISUALAID'] = 'Näytä/piilota apuviivat';
$lang['fi_FI']['Image']['PLURALNAME'] = 'Tiedostot';
$lang['fi_FI']['Image']['SINGULARNAME'] = 'Tiedosto';
$lang['fi_FI']['ImageField']['NOTEADDIMAGES'] = 'Voit lisätä kuvia tallennettuasi ensimmäisen kerran.';
$lang['fi_FI']['ImageUplaoder']['ONEFROMFILESTORE'] = 'Tiedostolla tiedostovarastosta';
$lang['fi_FI']['ImageUploader']['ATTACH'] = 'Liite %s';
$lang['fi_FI']['ImageUploader']['DELETE'] = 'Poista %s';
$lang['fi_FI']['ImageUploader']['FROMCOMPUTER'] = 'Tietokoneeltasi';
$lang['fi_FI']['ImageUploader']['FROMFILESTORE'] = 'Tiedostovarastosta';
$lang['fi_FI']['ImageUploader']['ONEFROMCOMPUTER'] = 'Tiedostolla tietokoneeltasi';
$lang['fi_FI']['ImageUploader']['REALLYDELETE'] = 'Haluatko varmasti poistaa tämän: %s?';
$lang['fi_FI']['ImageUploader']['REPLACE'] = 'Korvaa %s';
$lang['fi_FI']['LoginAttempt']['PLURALNAME'] = 'Kirjautumisyritykset';
$lang['fi_FI']['LoginAttempt']['SINGULARNAME'] = 'Kirjautumisyritys';
$lang['fi_FI']['Member']['ADDRESS'] = 'Osoite';
$lang['fi_FI']['Member']['belongs_many_many_Groups'] = 'Ryhmät';
$lang['fi_FI']['Member']['BUTTONCHANGEPASSWORD'] = 'Vaihda salasana';
$lang['fi_FI']['Member']['BUTTONLOGIN'] = 'Kirjaudu sisään';
$lang['fi_FI']['Member']['BUTTONLOGINOTHER'] = 'Kirjaudu jonain muuna';
$lang['fi_FI']['Member']['BUTTONLOSTPASSWORD'] = 'Kadotin salasanani';
$lang['fi_FI']['Member']['CONFIRMNEWPASSWORD'] = 'Syötä uusi salasana uudelleen';
$lang['fi_FI']['Member']['CONFIRMPASSWORD'] = 'Syötä salasana uudelleen';
$lang['fi_FI']['Member']['CONTACTINFO'] = 'Yhteystiedot';
$lang['fi_FI']['Member']['db_LockedOutUntil'] = 'Lukittuna tähän asti:';
$lang['fi_FI']['Member']['db_PasswordExpiry'] = 'Salasanan viimeinen päivämäärä';
$lang['fi_FI']['Member']['EMAIL'] = 'Sähköposti';
$lang['fi_FI']['Member']['EMAILSIGNUPINTRO1'] = 'Onnea, sinusta tuli meidän uusi jäsen. Tietosi on kerrottu alla.';
$lang['fi_FI']['Member']['EMAILSIGNUPINTRO2'] = 'Voit kirjautua verkkosivustolle käyttäen seuraavia tietoja';
$lang['fi_FI']['Member']['EMAILSIGNUPSUBJECT'] = 'Kiitokset rekisteröinnistä';
$lang['fi_FI']['Member']['ERRORLOCKEDOUT'] = 'Tunnuksesti on väliaikaisesti poistettu käytöstä liian monien epäonnistuneiden sisäänkirjausyritysten takia. Ole hyvä ja yritä uudelleen 20 minuutin päästä.';
$lang['fi_FI']['Member']['ERRORNEWPASSWORD'] = 'Syötit uuden salasanasi erilailla, yritä uudelleen.';
$lang['fi_FI']['Member']['ERRORPASSWORDNOTMATCH'] = 'Nykyiset salasanasi eivät täsmää, yritä uudelleen.';
$lang['fi_FI']['Member']['ERRORWRONGCRED'] = 'Tämä ei näytä oikealta sähköpostiosoitteelta tai salasanalta. Yritä uudelleen.';
$lang['fi_FI']['Member']['FIRSTNAME'] = 'Etunimi';
$lang['fi_FI']['Member']['GREETING'] = 'Tervetuloa';
$lang['fi_FI']['Member']['INTERFACELANG'] = 'Käyttöliittymän kieli';
$lang['fi_FI']['Member']['LOGGEDINAS'] = 'Olet kirjautunut käyttäjänä %s.';
$lang['fi_FI']['Member']['MOBILE'] = 'Matkapuhelin';
$lang['fi_FI']['Member']['NAME'] = 'Nimi';
$lang['fi_FI']['Member']['NEWPASSWORD'] = 'Uusi salasana';
$lang['fi_FI']['Member']['PASSWORD'] = 'Salasana';
$lang['fi_FI']['Member']['PASSWORDCHANGED'] = 'Salasanasi on muutettu ja sähköpostiisi on lähetetty asiasta ilmoitus.';
$lang['fi_FI']['Member']['PERSONALDETAILS'] = 'Henkilökohtaiset tiedot';
$lang['fi_FI']['Member']['PHONE'] = 'Puhelin';
$lang['fi_FI']['Member']['PLURALNAME'] = 'Jäsenet';
$lang['fi_FI']['Member']['REMEMBERME'] = 'Muista seuraavalla kerralla?';
$lang['fi_FI']['Member']['SINGULARNAME'] = 'Jäsen';
$lang['fi_FI']['Member']['SUBJECTPASSWORDCHANGED'] = 'Salasanasi on vaihdettu';
$lang['fi_FI']['Member']['SUBJECTPASSWORDRESET'] = 'Salasanasi palautuslinkki';
$lang['fi_FI']['Member']['SURNAME'] = 'Sukunimi';
$lang['fi_FI']['Member']['USERDETAILS'] = 'Käyttäjätiedot';
$lang['fi_FI']['Member']['VALIDATIONMEMBEREXISTS'] = 'Rekisteröityneellä käyttäjällä on jo käytössä tämä sähköpostiosoite.';
$lang['fi_FI']['Member']['WELCOMEBACK'] = 'Tervetuloa takaisin, %s';
$lang['fi_FI']['Member']['YOUROLDPASSWORD'] = 'Vanha salasanasi';
$lang['fi_FI']['MemberAuthenticator']['TITLE'] = 'Sähköposti & Salasana';
$lang['fi_FI']['MemberPassword']['PLURALNAME'] = 'Jäsenen salasanat';
$lang['fi_FI']['MemberPassword']['SINGULARNAME'] = 'Jäsenen salasana';
$lang['fi_FI']['NullableField']['IsNullLabel'] = 'On nolla';
$lang['fi_FI']['NumericField']['VALIDATION'] = '%s ei ole numero, tähän kenttään hyväksytään vain numeroita.';
$lang['fi_FI']['NumericField']['VALIDATIONJS'] = 'ei ole numero, tämä kenttä hyväksyy vain numeroita';
$lang['fi_FI']['Page']['PLURALNAME'] = 'Sivut';
$lang['fi_FI']['Page']['SINGULARNAME'] = 'Sivu';
$lang['fi_FI']['Permission']['FULLADMINRIGHTS'] = 'Täydet ylläpitäjän oikeudet';
$lang['fi_FI']['Permission']['PERMSDEFINED'] = 'Seuraavat pääsykoodit on määritelty';
$lang['fi_FI']['Permission']['PLURALNAME'] = 'Luvat';
$lang['fi_FI']['Permission']['SINGULARNAME'] = 'Lupa';
$lang['fi_FI']['PhoneNumberField']['VALIDATION'] = 'Kirjoita pätevä puhelinnumero';
$lang['fi_FI']['QueuedEmail']['PLURALNAME'] = 'Odottavat postit';
$lang['fi_FI']['QueuedEmail']['SINGULARNAME'] = 'Odottava posti';
$lang['fi_FI']['RedirectorPage']['HASBEENSETUP'] = 'Sivu, joka ohjaa käyttäjän toiselle sivulle on valmis, mutta sivua, jolle käyttäjä ohjataan, ei ole.';
$lang['fi_FI']['RedirectorPage']['HEADER'] = 'Tämä sivu ohjaa käyttäjän toiselle sivulle';
$lang['fi_FI']['RedirectorPage']['OTHERURL'] = 'Toisen verkkosivuston URL-osoite';
$lang['fi_FI']['RedirectorPage']['PLURALNAME'] = 'Uudelleenohjaavat sivut';
$lang['fi_FI']['RedirectorPage']['REDIRECTTO'] = 'Minne ohjataan?';
$lang['fi_FI']['RedirectorPage']['REDIRECTTOEXTERNAL'] = 'Muu verkkosivusto';
$lang['fi_FI']['RedirectorPage']['REDIRECTTOPAGE'] = 'Sivu verkkosivustollasi';
$lang['fi_FI']['RedirectorPage']['SINGULARNAME'] = 'Uudelleenohjaava sivu';
$lang['fi_FI']['RedirectorPage']['YOURPAGE'] = 'Sivu verkkosivustollasi';
$lang['fi_FI']['RelationComplexTableField.ss']['ADD'] = 'Lisää';
$lang['fi_FI']['RelationComplexTableField.ss']['DELETE'] = 'poista';
$lang['fi_FI']['RelationComplexTableField.ss']['EDIT'] = 'muokkaa';
$lang['fi_FI']['RelationComplexTableField.ss']['SHOW'] = 'näytä';
$lang['fi_FI']['SearchForm']['GO'] = 'Mene';
$lang['fi_FI']['SearchForm']['SEARCH'] = 'Etsi';
$lang['fi_FI']['Security']['ALREADYLOGGEDIN'] = 'Sinulla ei ole oikeuksia tälle sivulle. Jos sinulla on toinen tili, jolla on oikeudet tälle sivulle, voit kirjautua niillä sisään.';
$lang['fi_FI']['Security']['BUTTONSEND'] = 'Lähetä minulle salasanan palautuslinkki';
$lang['fi_FI']['Security']['CHANGEPASSWORDBELOW'] = 'Voit vaihtaa salasanaasi alla.';
$lang['fi_FI']['Security']['CHANGEPASSWORDHEADER'] = 'Vaihda salasanasi';
$lang['fi_FI']['Security']['EMAIL'] = 'Sähköpsti: ';
$lang['fi_FI']['Security']['ENCDISABLED1'] = 'Salasanan salaus pois käytöstä!';
$lang['fi_FI']['Security']['ENCDISABLED2'] = 'Salataksesi salasanasi vaihda salasana asetuksiasi lisäämällä ';
$lang['fi_FI']['Security']['ENCDISABLED3'] = 'tiedostoon mysite/_config.php';
$lang['fi_FI']['Security']['ENCRYPT'] = 'Salataan kaikki salasanat';
$lang['fi_FI']['Security']['ENCRYPTEDMEMBERS'] = 'Salatut tiedot käyttäjälle "';
$lang['fi_FI']['Security']['ENCRYPTWITH'] = 'Salasanat salataan käyttäen "%s" algoritmia';
$lang['fi_FI']['Security']['ENCRYPTWITHOUTSALT'] = 'ilman tietoturvaa lisäävää suolausta.';
$lang['fi_FI']['Security']['ENCRYPTWITHSALT'] = 'suolan kanssa tietoturvan lisäämiseksi.';
$lang['fi_FI']['Security']['ENTERNEWPASSWORD'] = 'Syötä uusi salasanasi';
$lang['fi_FI']['Security']['ERRORPASSWORDPERMISSION'] = 'Sinun täytyy olla kirjautuneena sisään, jotta voit vaihtaa salasanasi.';
$lang['fi_FI']['Security']['ID'] = 'ID: ';
$lang['fi_FI']['Security']['IPADDRESSES'] = 'IP-osoitteet';
$lang['fi_FI']['Security']['LOGGEDOUT'] = 'Kirjauduit ulos. Jos haluat kirjautua sisään, syötä tietosi alle.';
$lang['fi_FI']['Security']['LOGIN'] = 'Kirjaudu sisään';
$lang['fi_FI']['Security']['LOSTPASSWORDHEADER'] = 'Salasana kadotettu';
$lang['fi_FI']['Security']['NOTEPAGESECURED'] = 'Tämä sivu on suojattu. Syötä tunnistetietosi alle ja annamme sinulle oikeat oikeudet.';
$lang['fi_FI']['Security']['NOTERESETPASSWORD'] = 'Syötä sähköpostiosoitteesi ja lähetämme sinulle linkin, jonka avulla saat palautettua salasanasi';
$lang['fi_FI']['Security']['NOTHINGTOENCRYPT1'] = 'Ei salasanoja salattavana';
$lang['fi_FI']['Security']['NOTHINGTOENCRYPT2'] = 'Sinulla ei ole jäseniä joilla olisi salattavia selväkielisiä salasanoja!';
$lang['fi_FI']['Security']['PASSWORDSENTHEADER'] = 'Salasanan palautuslinkki lähetettiin osoitteeseen %s';
$lang['fi_FI']['Security']['PASSWORDSENTTEXT'] = 'Kiitos! Salasanan palautuslinkki on lähetetty osoitteeseen %s.';
$lang['fi_FI']['SecurityAdmin']['ADVANCEDONLY'] = 'Tämä osio on vain edistyneemmille käyttäjille. Lue tämä sivu saadaksesi lisätietoja.';
$lang['fi_FI']['SecurityAdmin']['CODE'] = 'Koodi';
$lang['fi_FI']['SecurityAdmin']['GROUPNAME'] = 'Ryhmän nimi';
$lang['fi_FI']['SecurityAdmin']['IPADDRESSESHELP'] = '
Voit rajata tämän ryhmän käyttöoikeudet vain tiettyihin IP osoitteisiin (yksi raja riville).
Rajat voi olla seuraavissa muodoissa:

203.96.152.12

203.96.152/24

203.96/16

203/8

Jos syötät yhden tai useamman IP osoitteen tähän laatikkoon, jäsenet saavat ryhmän oikeudet vain kirjautuessaan sallitusta IP osoitteesta. Kirjautumista ei kuitenkaan estetä muista IP osoitteesta ja käyttäjä pystyy toimimaan järjestelmän alueilla, joissa rajoitus ei ole käytössä.';
$lang['fi_FI']['SecurityAdmin']['MEMBERS'] = 'Jäsenet';
$lang['fi_FI']['SecurityAdmin']['OPTIONALID'] = 'Vapaaehtoinen ID';
$lang['fi_FI']['SecurityAdmin']['PERMISSIONS'] = 'Oikeudet';
$lang['fi_FI']['SecurityAdmin']['VIEWUSER'] = 'Näytä käyttäjä';
$lang['fi_FI']['SimpleImageField']['NOUPLOAD'] = 'Kuvaa ei kopioitu palvelimelle';
$lang['fi_FI']['SiteTree']['ACCESSANYONE'] = 'Jokainen';
$lang['fi_FI']['SiteTree']['ACCESSHEADER'] = 'Ketkä saavat katsoa tätä sivua?';
$lang['fi_FI']['SiteTree']['ACCESSLOGGEDIN'] = 'Kirjautuneet käyttäjät';
$lang['fi_FI']['SiteTree']['ACCESSONLYTHESE'] = 'Vain seuraavat henkilöt (valitse listalta)';
$lang['fi_FI']['SiteTree']['ADDEDTODRAFT'] = 'Lisätty luonnossivustolle';
$lang['fi_FI']['SiteTree']['ALLOWCOMMENTS'] = 'Sallitaanko kommenttien jättö tälle sivulle?';
$lang['fi_FI']['SiteTree']['BUTTONCANCELDRAFT'] = 'Peruuta muutokset, jotka teit luonnokseen';
$lang['fi_FI']['SiteTree']['BUTTONCANCELDRAFTDESC'] = 'Poista luonnoksesi ja palauta julkaistu sivu';
$lang['fi_FI']['SiteTree']['BUTTONSAVEPUBLISH'] = 'Tallenna & julkaise';
$lang['fi_FI']['SiteTree']['BUTTONUNPUBLISH'] = 'Poista julkaisu';
$lang['fi_FI']['SiteTree']['BUTTONUNPUBLISHDESC'] = 'Poista tämä sivu julkaistulta sivustolta';
$lang['fi_FI']['SiteTree']['CHANGETO'] = 'Muuta';
$lang['fi_FI']['SiteTree']['Content'] = 'Sisältö';
$lang['fi_FI']['SiteTree']['DEFAULTABOUTCONTENT'] = '
Voit täyttää tämän sivun omalla sisällölläsi tai poistaa sen ja luoda omia sivujasi.

';
$lang['fi_FI']['SiteTree']['DEFAULTABOUTTITLE'] = 'Tietoa meistä';
$lang['fi_FI']['SiteTree']['DEFAULTCONTACTCONTENT'] = '
Voit täyttää tämän sivun omalla sisällölläsi tai poistaa sen ja luoda omia sivujasi.

';
$lang['fi_FI']['SiteTree']['DEFAULTCONTACTTITLE'] = 'Ota yhteyttä meihin';
$lang['fi_FI']['SiteTree']['DEFAULTHOMECONTENT'] = '
Tervetuloa SilverStripeen! Tämä on oletus-kotisivu. Voit muokata tätä sivua avaamalla CMS:n. Voit myös lukea kehittäjä-dokumentaatiota tai aloittaa johdatuskursseista.
';
$lang['fi_FI']['SiteTree']['DEFAULTHOMETITLE'] = 'Koti';
$lang['fi_FI']['SiteTree']['EDITANYONE'] = 'Jokainen, joka voi kirjautua sisään CMS:ään.';
$lang['fi_FI']['SiteTree']['EDITHEADER'] = 'Kuka voi muokata tätä CMS:ssä?';
$lang['fi_FI']['SiteTree']['EDITONLYTHESE'] = 'Vain seuraavat henkilöt (valitse listasta)';
$lang['fi_FI']['SiteTree']['GROUP'] = 'Ryhmä';
$lang['fi_FI']['SiteTree']['HASBROKENLINKS'] = 'Tällä sivulla on rikkinäisiä linkkejä';
$lang['fi_FI']['SiteTree']['has_one_Parent'] = 'Sivupohja';
$lang['fi_FI']['SiteTree']['HOMEPAGEFORDOMAIN'] = 'Verkkoalue(et)';
$lang['fi_FI']['SiteTree']['HTMLEDITORTITLE'] = 'Sisältö';
$lang['fi_FI']['SiteTree']['MENUTITLE'] = 'Navigoinnin nimike';
$lang['fi_FI']['SiteTree']['METADESC'] = 'Kuvaus';
$lang['fi_FI']['SiteTree']['METAEXTRA'] = 'Omat meta-tagit';
$lang['fi_FI']['SiteTree']['METAHEADER'] = 'Hakukoneen meta-tagit';
$lang['fi_FI']['SiteTree']['METAKEYWORDS'] = 'Avainsanat';
$lang['fi_FI']['SiteTree']['METATITLE'] = 'Otsikko';
$lang['fi_FI']['SiteTree']['MODIFIEDONDRAFT'] = 'Muokattu luonnossivustolla';
$lang['fi_FI']['SiteTree']['NOBACKLINKS'] = 'Miltään sivulta ei linkitetä tälle sivulle.';
$lang['fi_FI']['SiteTree']['NOTEUSEASHOMEPAGE'] = 'Käytä tätä sivua "kotisivuna" seuraaville verkkoalueille:
(erottele eri verkkoalueet pilkuilla)';
$lang['fi_FI']['SiteTree']['PAGESLINKING'] = 'Seuraavat sivut linkittävät tälle sivulle:';
$lang['fi_FI']['SiteTree']['PAGETITLE'] = 'Sivun nimi';
$lang['fi_FI']['SiteTree']['PAGETYPE'] = 'Sivun tyyppi';
$lang['fi_FI']['SiteTree']['PLURALNAME'] = 'Sivukartat';
$lang['fi_FI']['SiteTree']['REMOVEDFROMDRAFT'] = 'Poistettu luonnossivustolta';
$lang['fi_FI']['SiteTree']['SHOWINMENUS'] = 'Näytetäänkö valikoissa?';
$lang['fi_FI']['SiteTree']['SHOWINSEARCH'] = 'Näytetäänkö hauissa?';
$lang['fi_FI']['SiteTree']['SINGULARNAME'] = 'Sivukartta';
$lang['fi_FI']['SiteTree']['TABACCESS'] = 'Oikeudet';
$lang['fi_FI']['SiteTree']['TABBACKLINKS'] = 'Linkit tänne';
$lang['fi_FI']['SiteTree']['TABBEHAVIOUR'] = 'Käyttäytyminen';
$lang['fi_FI']['SiteTree']['TABCONTENT'] = 'Sisältö';
$lang['fi_FI']['SiteTree']['TABMAIN'] = 'Yleiset';
$lang['fi_FI']['SiteTree']['TABMETA'] = 'Meta-tiedot';
$lang['fi_FI']['SiteTree']['TABREPORTS'] = 'Raportit';
$lang['fi_FI']['SiteTree']['TOPLEVEL'] = 'Sivuston sisältö (ylin taso)';
$lang['fi_FI']['SiteTree']['URL'] = 'URL-osoite';
$lang['fi_FI']['SiteTree']['URLSegment'] = 'URL-kenttä';
$lang['fi_FI']['SiteTree']['VALIDATIONURLSEGMENT1'] = 'Toinen sivu käyttää tätä URL-osoitetta. URL-osoitteen täytyy olla erilainen joka sivulla.';
$lang['fi_FI']['SiteTree']['VALIDATIONURLSEGMENT2'] = 'URL-osoite saa sisältää vain kirjaimia, numeroita ja tavuviivoja.';
$lang['fi_FI']['TableField']['ISREQUIRED'] = '%s:ssa %s on tarvittu.';
$lang['fi_FI']['TableField.ss']['ADD'] = 'Lisää uusi rivi';
$lang['fi_FI']['TableField.ss']['CSVEXPORT'] = 'Vie CSV:nä';
$lang['fi_FI']['TableListField']['CSVEXPORT'] = 'Vie CSV:nä';
$lang['fi_FI']['TableListField']['PRINT'] = 'Tulosta';
$lang['fi_FI']['TableListField_PageControls.ss']['DISPLAYING'] = 'Näytetään';
$lang['fi_FI']['TableListField_PageControls.ss']['VIEWFIRST'] = 'Näytä ensimmäinen';
$lang['fi_FI']['TableListField_PageControls.ss']['VIEWLAST'] = 'Näytä viimeinen';
$lang['fi_FI']['TableListField_PageControls.ss']['VIEWNEXT'] = 'Näytä seuraava';
$lang['fi_FI']['TableListField_PageControls.ss']['VIEWPREVIOUS'] = 'Näytä edellinen';
$lang['fi_FI']['ToggleCompositeField.ss']['HIDE'] = 'Piilota';
$lang['fi_FI']['ToggleCompositeField.ss']['SHOW'] = 'Näytä';
$lang['fi_FI']['ToggleField']['LESS'] = 'vähemmän';
$lang['fi_FI']['ToggleField']['MORE'] = 'lisää';
$lang['fi_FI']['Translatable']['CREATE'] = 'Luo uusi käännös';
$lang['fi_FI']['Translatable']['CREATEBUTTON'] = 'Luo';
$lang['fi_FI']['Translatable']['EXISTING'] = 'Olemassa olevat käännökset: ';
$lang['fi_FI']['Translatable']['NEWLANGUAGE'] = 'Uusi kieli';
$lang['fi_FI']['Translatable']['TRANSLATIONS'] = 'Käännökset';
$lang['fi_FI']['TreeSelectorField']['CANCEL'] = 'peruuta';
$lang['fi_FI']['TreeSelectorField']['SAVE'] = 'tallenna';
$lang['fi_FI']['TypeDropdown']['NONE'] = 'Ei mitään';
$lang['fi_FI']['Versioned']['has_many_Versions'] = 'Versiot';
$lang['fi_FI']['VirtualPage']['CHOOSE'] = 'Valitse sivu, jolle linkitetään';
$lang['fi_FI']['VirtualPage']['EDITCONTENT'] = 'muokataksesi sisältöä paina tästä';
$lang['fi_FI']['VirtualPage']['HEADER'] = 'Tämä on virtuaalinen sivu';
$lang['fi_FI']['VirtualPage']['PLURALNAME'] = 'Virtuaaliset sivut';
$lang['fi_FI']['VirtualPage']['SINGULARNAME'] = 'Virtuaalinen sivu';
$lang['fi_FI']['Widget']['PLURALNAME'] = 'Widgetit';
$lang['fi_FI']['Widget']['SINGULARNAME'] = 'Widgetti';
$lang['fi_FI']['WidgetArea']['PLURALNAME'] = 'Widget-alueet';
$lang['fi_FI']['WidgetArea']['SINGULARNAME'] = 'Widget-alue';

?>


text:
namespace pe {

using block_graph::BlockGraph;
using block_graph::ConstTypedBlock;
using core::RelativeAddress;

typedef testing::ApplicationTestBase CoffFileWriterTest;

TEST_F(CoffFileWriterTest, RedecomposeAfterWrite) {
  // Compute paths.
  base::FilePath temp_dir;
  ASSERT_NO_FATAL_FAILURE(CreateTemporaryDir(&temp_dir));

  base::FilePath image_path_0(
      testing::GetExeTestDataRelativePath(testing::kTestDllCoffObjName));
  base::FilePath image_path_1(temp_dir.Append(testing::kTestDllName));

  // Decompose the original image.
  CoffFile image_file_0;
  ASSERT_TRUE(image_file_0.Init(image_path_0));

  CoffDecomposer decomposer_0(image_file_0);
  block_graph::BlockGraph block_graph_0;
  pe::ImageLayout image_layout_0(&block_graph_0);
  ASSERT_TRUE(decomposer_0.Decompose(&image_layout_0));

  // Write temporary image file.
  CoffFileWriter writer_0(&image_layout_0);
  ASSERT_TRUE(writer_0.WriteImage(image_path_1));

  // Redecompose.
  CoffFile image_file_1;
  ASSERT_TRUE(image_file_1.Init(image_path_1));

  CoffDecomposer decomposer_1(image_file_1);
  block_graph::BlockGraph block_graph_1;
  pe::ImageLayout image_layout_1(&block_graph_1);
  ASSERT_TRUE(decomposer_1.Decompose(&image_layout_1));

  // Compare the results of the two decompositions.
  EXPECT_EQ(image_layout_0.sections, image_layout_1.sections);
  EXPECT_EQ(image_layout_0.blocks.size(), image_layout_1.blocks.size());

  ConstTypedBlock<IMAGE_FILE_HEADER> file_header_0;
  ConstTypedBlock<IMAGE_FILE_HEADER> file_header_1;
  BlockGraph::Block* headers_block_0 =
      image_layout_0.blocks.GetBlockByAddress(RelativeAddress(0));
  BlockGraph::Block* headers_block_1 =
      image_layout_1.blocks.GetBlockByAddress(RelativeAddress(0));
  ASSERT_TRUE(headers_block_0 != NULL);
  ASSERT_TRUE(headers_block_1 != NULL);
  ASSERT_TRUE(file_header_0.Init(0, headers_block_0));
  ASSERT_TRUE(file_header_1.Init(0, headers_block_1));
  EXPECT_TRUE(std::memcmp(&file_header_0[0], &file_header_1[0],
                          sizeof(file_header_0[0])) == 0);
}

}  // namespace pe